home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / doc / intlist / interrup.lst < prev    next >
Encoding:
File List  |  1991-05-11  |  2.2 MB  |  62,191 lines

Text Truncated. Only the first 1MB is shown below. Download the file for the complete contents.
  1. Interrupt List        Release 33            Last change 1/3/93
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. ---------------------------------------------
  4. Please redistribute the following files unmodified as a group, in a pair of
  5. archives named INTER33A and INTER33B (preferably the original authenticated
  6. PKZIP archives):
  7.     INTERRUP.1ST    the read-me file, containing credits, availability info
  8.     INTERRUP.A    INT 00 through INT 14    \
  9.     INTERRUP.B    INT 15 through INT 1F     \   total 1037 pages at
  10.     INTERRUP.C    INT 20 thru INT 21/7F      \  60 lines per page,
  11.     INTERRUP.D    INT 21/80 through INT 2E   \ 1110 with INTPRINT -p
  12.     INTERRUP.E    INT 2F through INT 2F/BF   / (4500 entries)
  13.     INTERRUP.F    INT 2F/C0 through INT 4F  /
  14.     INTERRUP.G    INT 50 through INT 67     /
  15.     INTERRUP.H    INT 68 through INT FF    /
  16.     INTERRUP.PRI    a brief introduction to interrupts
  17.     INTPRINT.COM    a simple formatter that also generates a list summary
  18.     INTPRINT.DOC    instructions for INTPRINT
  19.     GLOSSARY.LST    a glossary of terms, abbreviations, and acronyms
  20.     MEMORY.LST    format of the BIOS data area
  21. The following files should be distributed in an archive called INTER33C:
  22.     INT.COM        invoke interrupts from commandline
  23.     INT2GUID.*    convert list into TurboPower GUIDE or POPHELP database
  24.     INT2HLP.BAT    Perl script to convert list into QuickHelp database
  25.     INT2QH.*    program to convert list into QuickHelp database
  26.     INTHELP.*    convert list into TurboPower GUIDE database
  27.     INTLIST.E    Epsilon extension for handling list
  28.     INTPRINT.C    source code for INTPRINT
  29. ---------------------------------------------
  30. If you notice any mistakes or omissions, please let me know!  It is only with
  31. YOUR help that the list can continue to grow at the current rate.  Please send
  32. all changes to me rather than distributing a modified version of the list.
  33.  
  34. Please read the file INTERRUP.1ST before asking me any questions.  You may find
  35. that they have already been addressed.
  36.  
  37.      Ralf Brown
  38.  
  39. ARPA: ralf@cs.cmu.edu
  40. UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf
  41. BIT:  ralf%cs.cmu.edu@carnegie
  42. FIDO: Ralf Brown 1:129/26.1
  43.     or post a message to me in the DR_DEBUG echo (I probably won't see it
  44.     unless you address it to me)
  45. CIS:  >INTERNET:ralf@cs.cmu.edu 
  46.  
  47. I reply to all e-mail submissions and inquiries, but some of my replies bounce
  48. because of bad return paths.  If you don't get a response from me within a
  49. reasonable period of time, send it again with a better return path (starting at
  50. harvard or ucbvax for UUCP, from the ARPA Internet for others).
  51. ---------------------------------------------
  52. See INTERRUP.1ST for the key to system abbreviations and a list of the
  53. trademarks mentioned here.
  54. ---------------------------------------------
  55. DISCLAIMER:  THIS MATERIAL IS PROVIDED "AS IS".     I verify the information
  56. contained in this list to the best of my ability, but I cannot be held
  57. responsible for any problems caused by use or misuse of the information,
  58. especially for those functions not officially  documented.  If it is marked
  59. "internal" or undocumented, you should check it carefully to make sure it
  60. works the same way in your version of the software (and please let me know
  61. whether or not it works the same way).    Information marked with "???" is
  62. known to be incomplete or guesswork.
  63. ---------------------------------------------
  64. The use of -> instead of = signifies that the indicated register or register
  65. pair contains a pointer to the specified item, rather than the item itself.
  66. One or more letters may follow the interrupt number; they have the following
  67. meanings:  U - undocumented function, u - partially documented function,
  68. P - available only in protected mode, R - available only in real or V86 mode
  69. ----------00---------------------------------
  70. INT 00 - CPU-generated - DIVIDE ERROR
  71. Desc:    generated if the divisor of a DIV or IDIV instruction is zero or the
  72.       quotient overflows the result register; DX and AX will be unchanged.
  73. Notes:    on an 8086/8088, the return address points to the following instruction
  74.     on an 80286+, the return address points to the divide instruction
  75. SeeAlso: INT 04
  76. ----------01---------------------------------
  77. INT 01 - CPU-generated - SINGLE STEP
  78. Desc:    generated after each instruction if TF (trap flag) is set; TF is
  79.       cleared on invoking the single-step interrupt handler
  80. Notes:    interrupts are prioritized such that external interrupts are invoked
  81.       after the INT 01 pushes CS:IP/FLAGS and clears TF, but before the
  82.       first instruction of the handler executes
  83.     used by debuggers for single-instruction execution tracing, such as
  84.       MSDOS DEBUG's T command
  85. SeeAlso: INT 03
  86. ----------01---------------------------------
  87. INT 01 - CPU-generated (80386+) - DEBUGGING EXCEPTIONS
  88. Desc:    generated by the CPU on various occurrences which may be of interest
  89.       to a debugger program
  90. Note:    events which may trigger the interrupt:
  91.       Instruction address breakpoint fault - will return to execute inst
  92.       Data address breakpoint trap - will return to following instruction
  93.       General detect fault, debug registers in use
  94.       Task-switch breakpoint trap
  95. SeeAlso: INT 03
  96. ----------02---------------------------------
  97. INT 02 - external hardware - NON-MASKABLE INTERRUPT
  98. Desc:    generated by the CPU when the input to the NMI pin is asserted
  99. Notes:    return address points to start of interrupted instruction on 80286+
  100.     although the Intel documentation states that this interrupt is
  101.       typically used for power-failure procedures, it has many other uses
  102.       on IBM-compatible machines:
  103.         Memory parity error: all except Jr, CONV, and some machines
  104.                 without memory parity
  105.         Breakout switch on hardware debuggers
  106.         Coprocessor interrupt: all except Jr and CONV
  107.         Keyboard interrupt: Jr, CONV
  108.         I/O channel check: CONV, PS50+
  109.         Disk-controller power-on request: CONV
  110.         System suspend: CONV
  111.         Real-time clock: CONV
  112.         System watch-dog timer, time-out interrupt: PS50+
  113.         DMA timer time-out interrupt: PS50+
  114.         Low battery: HP 95LX
  115.         Module pulled: HP 95LX
  116. ----------03---------------------------------
  117. INT 03 - CPU-generated - BREAKPOINT
  118. Desc:    generated by the one-byte breakpoint instruction (opcode CCh)
  119. Notes:    used by debuggers to implement breakpoints, such as MSDOS DEBUG's G
  120.       command
  121.     also used by Turbo Pascal versions 1,2,3 when {$U+} specified
  122.     return address points to byte following the breakpoint instruction
  123. SeeAlso: INT 01
  124. ----------0309--SI4647-----------------------
  125. INT 03 - Soft-ICE BACK DOOR COMMANDS
  126.     AH = 09h
  127.     SI = 4647h ('FG')
  128.     DI = 4A4Dh ('JM')
  129.     AL = function
  130.         10h display string in Soft-ICE window
  131.         DS:DX -> ASCIZ string to display (max 100 bytes, 0Dh OK)
  132.         11h execute Soft-ICE command
  133.         DS:DX -> ASCIZ command string (max 100 bytes, 0Dh OK)
  134.         12h get breakpoint information
  135.         Return:    BH = entry number of last breakpoint set
  136.             BL = type of last breakpoint set
  137.                 00h BPM (breakpoint register types)
  138.                 01h I/O
  139.                 02h INTerrupt
  140.                 03h BPX (INT 03h-style breakpoint)
  141.                 04h reserved
  142.                 05h range
  143.             DH = entry number of last breakpoint to be triggered
  144.             DL = type of last triggered breakpoint (see above)
  145. Desc:    this API allows application programs to control some aspects of the
  146.       Soft-ICE debugger
  147. Program: Soft-ICE is a debugger by Nu-Mega Technologies, Inc.
  148. ----------04---------------------------------
  149. INT 04 - CPU-generated - INTO DETECTED OVERFLOW
  150. Desc:    the INTO instruction will generate this interrupt if OF (Overflow Flag)
  151.       is set; otherwise, INTO is effectively a NOP
  152. Note:    may be used for convenient overflow testing (to prevent errors from
  153.       propagating) instead of JO or a JNO/JMP combination
  154. SeeAlso: INT 00
  155. ----------05---------------------------------
  156. INT 05 - PRINT SCREEN
  157. Desc:    dump the current text screen to the first printer
  158. Notes:    normally invoked by the INT 09 handler when PrtSc key is pressed, but
  159.       may be invoked directly by applications
  160.     byte at 0050h:0000h contains status used by default handler
  161.       00h not active
  162.       01h PrtSc in progress
  163.       FFh last PrtSc encountered error
  164.     default handler is at F000h:FF54h in IBM PC and 100%-compatible BIOSes
  165. SeeAlso: INT 10/AH=12h/BL=20h
  166. ----------05---------------------------------
  167. INT 05 - CPU-generated (80186+) - BOUND RANGE EXCEEDED
  168. Desc:    generated by BOUND instruction when the value to be tested is less than
  169.       the indicated lower bound or greater than the indicated upper bound.
  170. Note:    returning from this interrupt re-executes the failing BOUND instruction
  171. ----------06---------------------------------
  172. INT 06 - CPU-generated (80286+) - INVALID OPCODE
  173. Desc:    this interrupt is generated when the CPU attempts to execute an
  174.       invalid opcode (most protected-mode instructions are considered
  175.       invalid in real mode) or a BOUND, LDS, LES, or LIDT instruction
  176.       which specifies a register rather than a memory address
  177. Notes:    return address points to beginning of invalid instruction
  178.     with proper programming, this interrupt may be used to emulate
  179.       instructions which do not exist; many 386 BIOSes emulate the 80286
  180.       undocumented LOADALL instruction which was removed from the 80386+
  181. SeeAlso: INT 0C"CPU",INT 0D"CPU"
  182. ----------06---------------------------------
  183. INT 06 C - HP 95LX - SLEEP/WAKEUP
  184. Desc:    this interrupt is called just before going into light or deep
  185.       (shutdown) sleep and just after returning from light or deep sleep
  186. SeeAlso: INT 0B"HP 95LX",INT 15/AX=4DD4h,INT 15/AH=4Eh
  187. ----------07---------------------------------
  188. INT 07 - CPU-generated (80286+) - PROCESSOR EXTENSION NOT AVAILABLE
  189. Desc:    this interrupt is automatically called if a coprocessor instruction is
  190.       encountered when no coprocessor is installed
  191. Note:    can be used to emulate a numeric coprocessor in software
  192. SeeAlso: INT 09"MATH UNIT PROTECTION"
  193. ----------08---------------------------------
  194. INT 08 - IRQ0 - SYSTEM TIMER
  195. Desc:    generated 18.2 times per second by channel 0 of the 8254 system timer,
  196.       this interrupt is used to keep the time-of-day clock updated
  197. Notes:    programs which need to be invoked regularly should use INT 1C unless
  198.       they need to reprogram the timer while still keeping the time-of-day
  199.       clock running at the proper rate
  200.     default handler is at F000h:FEA5h in IBM PC and 100%-compatible BIOSes
  201.     may be masked by setting bit 0 on I/O port 21h
  202. SeeAlso: INT 1C,INT 4A,INT 50"DESQview",INT 58"DoubleDOS",INT 70,INT 78"GO32"
  203. ----------08---------------------------------
  204. INT 08 - CPU-generated (80286+) - DOUBLE EXCEPTION DETECTED
  205. Desc:    called when multiple exceptions occur on one instruction, or an
  206.       exception occurs in an exception handler
  207. Notes:    called in protected mode if an interrupt above the defined limit of
  208.       the interrupt vector table occurs
  209.     return address points at beginning of instruction with errors or the
  210.       beginning of the instruction which was about to execute when the
  211.       external interrupt caused the exception
  212.     if an exception occurs in the double fault handler, the CPU goes into
  213.       SHUTDOWN mode (which circuitry in the PC/AT converts to a reset);
  214.       this "triple fault" is a faster way of returning to real mode on
  215.       many 80286 machines than the standard keyboard controller reset
  216. ----------09---------------------------------
  217. INT 09 - IRQ1 - KEYBOARD DATA READY
  218. Desc:    this interrupt is generated when data is received from the keyboard.
  219.       This is normally a scan code (from either a keypress *or* a key
  220.       release), but may also be an ACK or NAK of a command on AT-class
  221.       keyboards.
  222. Notes:    this IRQ may be masked by setting bit 1 on I/O port 21h
  223.     if the BIOS supports an enhanced (101/102-key) keyboard, it calls
  224.       INT 15/AH=4Fh after reading the scan code from the keyboard and
  225.       before further processing; all further processing uses the scan
  226.       code returned from INT 15/AH=4Fh
  227.     the default interrupt handler is at F000h:E987h in 100%-compatible
  228.       BIOSes
  229.     the interrupt handler performs the following actions for certain
  230.       special keystrokes:
  231.         Ctrl-Break     clear keyboard buffer, place word 0000h in buffer,
  232.              invoke INT 1B, and set flag at 0040h:0071h
  233.         SysRq     invoke INT 15/AH=85h
  234.         Ctrl-Numlock place system in a tight wait loop until next INT 09
  235.         Ctrl-Alt-Del jump to BIOS startup code (either F000h:FFF0h or the
  236.                destination of the jump at that address)
  237.         Shift-PrtSc     invoke INT 05
  238.     DRDOS hooks this interrupt to control the cursor shape (underscore/
  239.       half block) for overwrite/insert mode
  240.     DR Multiuser DOS hooks this interrupt for cursor shape control and to
  241.       control whether Ctrl-Alt-Del reboots the current session or the
  242.       entire system
  243. SeeAlso: INT 05,INT 0B"HP 95LX",INT 15/AH=4Fh,INT 15/AH=85h,INT 16,INT 1B
  244. SeeAlso: INT 2F/AX=A901h,INT 51"DESQview",INT 59"DoubleDOS",INT 79"GO32"
  245.  
  246. Values for scan code:
  247.  01h    Esc         31h    N        
  248.  02h    1 !         32h    M        
  249.  03h    2 @         33h    , <         63h    F16
  250.  04h    3 #         34h    . >         64h    F17
  251.  05h    4 $         35h    / ?         65h    F18
  252.  06h    5 %         36h    Right Shift     66h    F19
  253.  07h    6 ^         37h    Grey*         67h    F20
  254.  08h    7 &         38h    Alt         68h    F21
  255.  09h    8 *         39h    SpaceBar     69h    F22
  256.  0Ah    9 (         3Ah    CapsLock     6Ah    F23
  257.  0Bh    0 )         3Bh    F1         6Bh    F24
  258.  0Ch    - _         3Ch    F2         6Ch    --
  259.  0Dh    = +         3Dh    F3         6Dh    EraseEOF
  260.  0Eh    Backspace     3Eh    F4        
  261.  0Fh    Tab         3Fh    F5         6Fh    Copy/Play
  262.  10h    Q         40h    F6        
  263.  11h    W         41h    F7        
  264.  12h    E         42h    F8         72h    CrSel
  265.  13h    R         43h    F9        
  266.  14h    T         44h    F10         74h    ExSel
  267.  15h    Y         45h    NumLock         75h    --
  268.  16h    U         46h    ScrollLock     76h    Clear
  269.  17h    I         47h    Home
  270.  18h    O         48h    UpArrow
  271.  19h    P         49h    PgUp
  272.  1Ah    [ {         4Ah    Grey-
  273.  1Bh    ] }         4Bh    LeftArrow
  274.  1Ch    Enter         4Ch    Keypad 5                     
  275.  1Dh    Ctrl         4Dh    RightArrow                     
  276.  1Eh    A         4Eh    Grey+                         
  277.  1Fh    S         4Fh    End                         
  278.  20h    D         50h    DownArrow     E0h    prefix code
  279.  21h    F         51h    PgDn         E1h    prefix code
  280.  22h    G         52h    Ins         FAh    ACK
  281.  23h    H         53h    Del         FEh    RESEND
  282.  24h    J         54h    SysRq         FFh    kbd error/buffer full
  283.  25h    K
  284.  26h    L                    
  285.  27h    ; :         57h    F11
  286.  28h    ' "         58h    F12        
  287.  29h    ` ~        
  288.  2Ah    Left Shift     5Ah    PA1
  289.  2Bh    \ |         5Bh    F13
  290.  2Ch    Z         5Ch    F14
  291.  2Dh    X         5Dh    F15
  292.  2Eh    C        
  293.  2Fh    V        
  294.  30h    B        
  295. Note:    scan codes 57h-E1h are only available on the extended (101/102-key)
  296.       keyboard and Host Connected (122-key) keyboard; scan codes 5Ah-76h
  297.       are only available on the 122-key keyboard
  298. ----------09---------------------------------
  299. INT 09 - CPU-generated (80286,80386) - PROCESSOR EXTENSION PROTECTION ERROR
  300. Desc:    called if the coprocessor attempts to access memory outside a segment
  301.       boundary; it may occur at an arbitrary time after the coprocessor
  302.       instruction was issued
  303. Note:    until the condition is cleared or the coprocessor is reset, the only
  304.       coprocessor instruction which may be used is FNINIT; WAIT or other
  305.       coprocessor instructions will cause a deadlock because the
  306.       coprocessor is still busy waiting for data
  307. SeeAlso: INT 07"CPU"
  308. ----------09---------------------------------
  309. INT 09 P - internal hardware - RESERVED BY Intel (80486)
  310. Note:    this exception has been moved to INT 0D
  311. SeeAlso: INT 09"MATH",INT 0D
  312. ----------0A---------------------------------
  313. INT 0A - IRQ2 - LPT2 (PC), VERTICAL RETRACE INTERRUPT (EGA,VGA)
  314. Notes:    the TOPS and PCnet adapters use this interrupt request line by default
  315.     DOS 3.2 revectors IRQ2 to a stack-switching routine
  316.     on ATs and above, the physical data line for IRQ2 is labeled IRQ9 and
  317.       connects to the slave 8259.  The BIOS redirects the interrupt for
  318.       IRQ9 back here.
  319.     under DESQview, only the INT 15h vector and BASIC segment address (the
  320.       word at 0000h:0510h) may be assumed to be valid for the handler's
  321.       process
  322.     many VGA boards do not implement the vertical retrace interrupt,
  323.       including the IBM VGA Adapter where the traces are either cut or
  324.       removed
  325. SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71,INT 7A"GO32"
  326. ----------0A---------------------------------
  327. INT 0A - IRQ2 - Tandy 1000-series HARD DISK
  328. Note:    may be masked by setting bit 2 on I/O port 21h
  329. SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71
  330. ----------0A---------------------------------
  331. INT 0A - IRQ2 - ROLAND MPU MIDI INTERFACE
  332. Note:    newer Roland cards and MIDI interfaces by other manufacturers use
  333.       a jumper-selectable IRQ, but software and hardware generally defaults
  334.       to IRQ2
  335. SeeAlso: INT 52"DESQview",INT 5A"DoubleDOS",INT 71,INT 7A"GO32"
  336. ----------0A---------------------------------
  337. INT 0A P - CPU-generated (80286+) - INVALID TASK STATE SEGMENT
  338. Desc:    automatically called during a task switch if the new TSS specified by
  339.       the task gate is invalid for any of the following reasons:
  340.         TSS limit is less than 43 (80286) or 103 (80386/80486)
  341.         LDT selector invalid or segment not present
  342.         null SS selector, or SS selector outside LDT/GDT limit
  343.         stack segment is read-only
  344.         stack segment DPL differs from new CPL, or RPL <> CPL
  345.         CS selector is outside LDT/GDT limit or not code
  346.         non-conforming code segment's DPL differs from CPL
  347.         conforming code segment's DPL > CPL
  348.         DS/ES selectors outside LDT/GDT limit or not readable segments
  349. Note:    the handler must use a task gate in order to have a valid TSS under
  350.       which to execute; it must also reset the busy bit in the new TSS
  351. SeeAlso: INT 0B"CPU"
  352. ----------0B---------------------------------
  353. INT 0B - IRQ3 - SERIAL COMMUNICATIONS (COM2)
  354. Notes:    the TOPS and PCnet adapters use this interrupt request line as an
  355.       alternate
  356.     on PS/2's, COM2 through COM8 share this interrupt; on many PC's, COM4
  357.       shares this interrupt
  358.     may be masked by setting bit 3 on I/O port 21h
  359. SeeAlso: INT 0C"COM1",INT 53"DESQview",INT 5B"DoubleDOS",INT 7B"GO32"
  360. ----------0B---------------------------------
  361. INT 0B P - CPU-generated (80286+) - SEGMENT NOT PRESENT
  362. Desc:    generated when loading a segment register if the segment descriptor
  363.       indicates that the segment is not currently in memory, unless the
  364.       segment is an LDT (see INT 0A"CPU") or stack segment (see
  365.       INT 0C"CPU") needed by a task switch
  366. Note:    may be used to implement virtual memory by loading in segments as they
  367.       are accessed, clearing the "not present" bit after loading
  368. SeeAlso: INT 0A"CPU",INT 0E"hardware"
  369. ----------0B---------------------------------
  370. INT 0B - HP 95LX - LOW-LEVEL KEYBOARD HANDLER
  371. Desc:    this is the lowest-level keyboard handler on an HP 95LX palmtop
  372. Note:    debounces key, places the keycode in I/O register 60h, and calls INT 09
  373. SeeAlso: INT 09,INT 0D"HP 95LX",INT 15/AX=4DD4h
  374. ----------0C---------------------------------
  375. INT 0C - IRQ4 - SERIAL COMMUNICATIONS (COM1)
  376. Notes:    on many PC's, COM3 shares this interrupt
  377.     may be masked by setting bit 4 on I/O port 21h
  378.     this vector is modified but not restored by Direct Access v4.0, and
  379.       may be left dangling by other programs written with the same version
  380.       of compiled BASIC
  381. SeeAlso: INT 0B"COM2",INT 54"DESQview",INT 5C"DoubleDOS",INT 7C"GO32"
  382. ----------0C---------------------------------
  383. INT 0C - CPU-generated (80286+) - STACK FAULT
  384. Desc:    this interrupt is generated in protected mode on a stack overflow or
  385.       underflow, or if an inter-level transition or task switch references
  386.       a stack segment marked "not present"; it is generated in real mode
  387.       on accessing a word operand at SS:FFFFh
  388. Note:    the 80286 will shut down in real mode if SP=1 before a push.  On the
  389.       PC AT and compatibles, external circuitry generates a reset on
  390.       shutdown.
  391. SeeAlso: INT 0B"CPU",INT 0D"CPU"
  392. ----------0C---------------------------------
  393. INT 0C - IBM SYSTEM 36/38 WORKSTATION EMULATION - API POINTER
  394.    Call offset 100h in the interrupt handler's segment with
  395.     AH = function
  396.         03h update screen
  397.         05h select next session
  398.         AL = session number (00h-03h)
  399.         Return: AL = session type code
  400.                 00h not active
  401.                 01h display session
  402.                 02h printer session
  403.                 FEh invalid session number
  404.             DS = requested session's data segment (0 if not active)
  405. Return: ???
  406.  
  407. Format of emulator's data area (offset from interrupt handler's segment):
  408. Offset    Size    Description
  409. 13Eh    BYTE    bit flags for status line indicators turned on since this byte
  410.         last zerod
  411. 13Fh    BYTE    bit flags for status line indicators turned off since this
  412.         byte last set to FFh
  413. 140h    WORD    offset of EBCDIC to ASCII translation
  414. 146h    WORD    offset of EBCDIC screen buffer
  415. 148h    WORD    offset of EC (engineering change) level signature
  416. 150h    BYTE    "KEYI"
  417. 151h    BYTE    5250 key scan code to be sent to remote
  418. 15Bh    BYTE    "SYSAV"
  419. 15Dh    BYTE    5250 cursor column
  420. 15Eh    BYTE    5250 cursor row
  421. 167h    BYTE    "DVCTAD"
  422. 178h    BYTE    "FLAGS"
  423. 184h    BYTE    "SESSNOAD"
  424. 193h    BYTE    "STNAD"
  425. 198h    BYTE    "NSDS"
  426. ----------0D---------------------------------
  427. INT 0D - IRQ5 - FIXED DISK (PC,XT), LPT2 (AT), reserved (PS/2)
  428. Notes:    under DESQview, only the INT 15h vector and BASIC segment address (the
  429.       word at 0000h:0510h) may be assumed to be valid for the handler's
  430.       process
  431.     may be masked by setting bit 5 on I/O port 21h
  432. SeeAlso: INT 0E"IRQ6",INT 0F"IRQ7",INT 55"DESQview",INT 5D"DoubleDOS"
  433. SeeAlso: INT 7D"GO32"
  434. ----------0D---------------------------------
  435. INT 0D - IRQ5 - Tandy 1000 60 Hz RAM REFRESH
  436. Desc:    used to ensure that the dynamic RAM retains its contents
  437. SeeAlso: INT 55
  438. ----------0D---------------------------------
  439. INT 0D - HP 95LX - INFRARED INTERRUPT
  440. Desc:    this interrupt is used to perform communications over the infrared
  441.       data link
  442. SeeAlso: INT 0B"HP 95LX",INT 0E"HP 95LX",INT 15/AX=4DD4h
  443. ----------0D---------------------------------
  444. INT 0D - CPU-generated (80286+) - GENERAL PROTECTION VIOLATION
  445. Desc:    the CPU generates this interrupt when it detects a protection violation
  446.       which does not fit under any other category having a separate
  447.       interrupt
  448. Notes:    called in real mode when
  449.         an instruction accesses a word operand located at offset FFFFh in
  450.           segment CS, DS, ES, FG, or GS
  451.         a PUSH MEM or POP MEM instruction contains an invalid bit encoding
  452.           in the second byte
  453.         an instruction exceeds the maximum length allowed (10 bytes for
  454.           80286, 15 bytes for 80386/80486)
  455.         an instruction wraps from offset FFFFh to offset 0000h
  456.     called in protected mode on protection violations not covered by INT 06
  457.       through INT 0C, including
  458.         segment limit violations
  459.         write to read-only segments
  460.         accesses using null DS or ES selectors
  461.         accesses to segments with privilege greater than CPL
  462.         wrong descriptor type
  463.     called on 80486 protected-mode floating-point protection fault
  464. SeeAlso: INT 09"80486",INT 0C"STACK"
  465. ----------0E---------------------------------
  466. INT 0E - IRQ6 - DISKETTE CONTROLLER
  467. Desc:    this interrupt is generated by the floppy disk controller on
  468.       completion of an operation
  469. Notes:    default handler is at F000h:EF57h in IBM PC and 100%-compatible BIOSes
  470.     may be masked by setting bit 6 on I/O port 21h
  471. SeeAlso: INT 0D"IRQ5",INT 56"DESQview",INT 5E"DoubleDOS",INT 7E"GO32"
  472. ----------0E---------------------------------
  473. INT 0E - CPU-generated (80386+ native mode) - PAGE FAULT
  474. Desc:    this interrupt is generated in protected and virtual-86 modes on
  475.       attempting to access a 4K memory page whose page table entry has
  476.       the "present" bit cleared
  477. Note:    used to implement virtual memory
  478. SeeAlso: INT 0B"hardware"
  479. ----------0E---------------------------------
  480. INT 0E - HP 95LX - EXTERNAL CARD INTERRUPT
  481. SeeAlso: INT 0D"HP 95LX",INT 0F"HP 95LX",INT 15/AX=4DD4h
  482. ----------0F---------------------------------
  483. INT 0F - IRQ7 - PARALLEL PRINTER
  484. Desc:    this interrupt is generated by the LPT1 printer adapter when the
  485.       printer becomes ready
  486. Notes:    most printer adapters do not reliably generate this interrupt
  487.     the 8259 interrupt controller generates an interrupt corresponding to
  488.       IRQ7 when an error condition occurs
  489. SeeAlso: INT 0D"LPT2",INT 57"DESQview",INT 5F"DoubleDOS",INT 7F"GO32"
  490. ----------0F---------------------------------
  491. INT 0F - HP 95LX - REAL-TIME CLOCK
  492. SeeAlso: INT 0E"HP 95LX",INT 15/AX=4DD4h,INT 70
  493. ----------10---------------------------------
  494. INT 10 - CPU-generated (80286+) - COPROCESSOR ERROR
  495. Desc:    this interrupt is generated by the CPU when the -ERROR pin is asserted
  496.       by the coprocessor
  497. Note:    AT's and clones usually wire the coprocessor to use IRQ13, but not all
  498.       get it right
  499. SeeAlso: INT 09"hardware",INT 75
  500. ----------1000-------------------------------
  501. INT 10 - VIDEO - SET VIDEO MODE
  502.     AH = 00h
  503.     AL = mode (see below)
  504. Return: AL = video mode flag (Phoenix BIOS)
  505.         20h mode > 7
  506.         30h modes 0-5 and 7
  507.         3Fh mode 6
  508.     AL = CRT controller mode byte (Phoenix 386 BIOS v1.10)
  509. Notes:    IBM standard modes do not clear the screen if the high bit of AL is set
  510.       (EGA or higher only)
  511.     the Tseng ET4000 chipset is used by the Orchid Prodesigner II, Diamond
  512.       SpeedSTAR VGA, Groundhog Graphics Shadow VGA, Boca Super X VGA,
  513.       Everex EV-673
  514.     the installation check for Ahead adapters is the signature "AHEAD" at
  515.       C000h:0025h
  516.     the installation check for Paradise adapters is the signature "VGA=" at
  517.       C000h:007Dh
  518.     the installation check for Oak Tech OTI-037/057/067/077 chipsets is the
  519.       signature "OAK VGA" at C000h:0008h
  520.     the installation check for ATI adapters is the signature "761295520" at
  521.       C000h:0031h; the byte at C000h:0043h indicates the chipset revision:
  522.         31h for 18800
  523.         32h for 18800-1
  524.         33h for 18800-2
  525.         34h for 18800-4
  526.         35h for 18800-5
  527.       the two bytes at C000h:0040h indicate the adapter type
  528.         "22" EGA Wonder
  529.         "31" VGA Wonder
  530.         "32" EGA Wonder800+
  531.       the byte at C000h:0042h contains feature flags
  532.         bit 1: mouse port present
  533.         bit 4: programmable video clock
  534.       the byte at C000h:0044h contains additional feature flags if chipset
  535.       byte > 30h
  536.         bit 0: 70 Hz non-interlaced display
  537.         bit 1: Korean (double-byte) characters
  538.         bit 2: 45 MHz memory clock rather than 40 MHz
  539.         bit 3: zero wait states
  540.         bit 4: paged ROMs
  541.         bit 6: no 8514/A monitor support
  542.         bit 7: HiColor DAC
  543.     the installation check for Genoa video adapters is the signature
  544.       77h XXh 99h 66h at C000h:0037h, where XXh is
  545.         00h for Genoa 6200/6300
  546.         11h for Genoa 6400/6600
  547.         22h for Genoa 6100
  548.         33h for Genoa 5100/5200
  549.         55h for Genoa 5300/5400
  550.       for SuperEGA BIOS v2.41+, C000h:0057h contains the product level
  551.       for SuperEGA BIOS v3.0+, C000h:0070h contains the signature
  552.       "EXTMODE", indicating support for extended modes
  553. SeeAlso: AX=0070h,AX=007Eh,AX=10E0h,AX=10F0h,AH=40h,AX=6F05h,AH=FFh"GO32"
  554. SeeAlso: INT 33/AX=0028h,INT 5F/AH=00h,INT 62/AX=0001h
  555.  
  556. Values for video mode:
  557.       text/ text pixel     pixel    colors    disply    scrn  system
  558.       grph resol  box    resoltn        pages    addr
  559.  00h = T   40x25  8x8        16gray       8    B800 CGA,PCjr
  560.      = T   40x25  8x14        16gray       8    B800 EGA
  561.      = T   40x25  8x16          16       8    B800 MCGA
  562.      = T   40x25  9x16          16       8    B800 VGA
  563.  01h = T   40x25  8x8          16       8    B800 CGA,PCjr
  564.      = T   40x25  8x14          16       8    B800 EGA
  565.      = T   40x25  8x16          16       8    B800 MCGA
  566.      = T   40x25  9x16          16       8    B800 VGA
  567.  02h = T   80x25  8x8        16gray       4    B800 CGA,PCjr
  568.      = T   80x25  8x14        16gray       4    B800 EGA
  569.      = T   80x25  8x16          16       4    B800 MCGA
  570.      = T   80x25  9x16          16       4    B800 VGA
  571.  03h = T   80x25  8x8          16       4    B800 CGA,PCjr
  572.      = T   80x25  8x14          16       4    B800 EGA
  573.      = T   80x25  8x16          16       4    B800 MCGA
  574.      = T   80x25  9x16          16       4    B800 VGA
  575.  04h = G   40x25  8x8    320x200       4        B800 CGA,PCjr,EGA,MCGA,VGA
  576.  05h = G   40x25  8x8    320x200     4gray        B800 CGA,PCjr,EGA
  577.      = G   40x25  8x8    320x200       4        B800 MCGA,VGA
  578.  06h = G   80x25  8x8    640x200       2        B800 CGA,PCjr,EGA,MCGA,VGA
  579.  07h = T   80x25  9x14         mono      var    B000 MDA,Hercules,EGA
  580.      = T   80x25  9x16         mono        B000 VGA
  581.  08h = T  132x25  8x8          16        B800 ATI EGA/VGA Wonder [1]
  582.      = T  132x25  8x8         mono        B000 ATI EGA/VGA Wonder [1]
  583.      = G   20x25  8x8    160x200      16             PCjr, Tandy 1000
  584.      = G   90x43  8x8    720x352     mono        B000 Hercules + MSHERC.COM
  585.  09h = G   40x25  8x8    320x200      16             PCjr
  586.  0Ah = G   80x25  8x8    640x200       4             PCjr, Tandy 1000
  587.  0Bh =     reserved (used internally by EGA BIOS)
  588.      = G        640x200      16             Tandy 1000 SL/TL
  589.  0Ch =     reserved (used internally by EGA BIOS)
  590.  0Dh = G   40x25  8x8    320x200      16       8    A000 EGA,VGA
  591.  0Eh = G   80x25  8x8    640x200      16       4    A000 EGA,VGA
  592.  0Fh = G   80x25  8x14    640x350     mono       2    A000 EGA,VGA
  593.  10h = G   80x25  8x14    640x350       4       2    A000 64k EGA
  594.      = G        640x350      16        A000 256k EGA,VGA
  595.  11h = G   80x30  8x16    640x480     mono        A000 VGA,MCGA,ATI EGA,ATI VIP
  596.  12h = G   80x30  8x16    640x480 16/256k        A000 VGA,ATI VIP
  597.      = G   80x30  8x16    640x480     16/64        A000 ATI EGA Wonder
  598.      = G        640x480      16             UltraVision+256K EGA
  599.  13h = G   40x25  8x8    320x200 256/256k    A000 VGA,MCGA,ATI VIP
  600.  14h = T  132x25  Nx16          16             XGA, IBM Enhanced VGA [2]
  601.      = G   80x25  8x8    640x200                 Lava Chrome II EGA
  602.      = G        640x400      16             Tecmar VGA/AD
  603.  15h = G   80x25  8x14    640x350                 Lava Chrome II EGA
  604.  16h = G   80x25  8x14    640x350                 Lava Chrome II EGA
  605.      = G        800x600      16             Tecmar VGA/AD
  606.  17h = T  132x25                     Tecmar VGA/AD
  607.      = G   80x34  8x14    640x480                 Lava Chrome II EGA
  608.  18h = T  132x25         mono        B000 Cirrus 5320 chipset
  609.      = T  132x44  8x8         mono             Tseng Labs EVA
  610.      = T  132x44  8x8         16/256       2    B000 Tseng ET4000 chipset
  611.      = G   80x34  8x14    640x480                 Lava Chrome II EGA
  612.      = G           1024x768      16             Tecmar VGA/AD
  613.  19h = T  132x25  8x14         mono             Tseng Labs EVA
  614.      = T  132x25  8x14         16/256       4    B000 Tseng ET4000 chipset
  615.      = T  132x34         mono        B000 Cirrus 5320 chipset
  616.  1Ah = T  132x28  8x13         mono             Tseng Labs EVA
  617.      = T  132x28  8x13         16/256       4    B000 Tseng ET4000 chipset
  618.      = T  132x44         mono        B000 Cirrus 5320 chipset
  619.      = G        640x350     256             Tecmar VGA/AD
  620.  1Bh = G        640x400     256             Tecmar VGA/AD
  621.  1Ch = T  132x25                     Cirrus 5320 chipset
  622.      = G        640x480     256             Tecmar VGA/AD
  623.  1Dh = T  132x43                     Cirrus 5320 chipset
  624.      = G        800x600     256             Tecmar VGA/AD
  625.  1Eh = T  132x44                     Cirrus 5320 chipset
  626.  1Fh = G        800x600      16             Realtek RTVGA
  627.  20h = G        240x128            B000 HP 95LX
  628.  21h = T  132x60          16       2    B800 Tseng ET4000 chipset
  629.      = T  132x44  9x9  1188x396     16/256k    B800 WD90C
  630.      = G   80x43  8x8    720x348     mono        B000 DESQview 2.x+Hercules [3]
  631.      = G           1024x768      16             Realtek RTVGA
  632.  22h = T  132x44  8x8                     Tseng Labs EVA
  633.      = T  132x44  8x8         16/256       2    B800 Tseng ET4000 chipset
  634.      = T  132x44  8x8                     Ahead Systems EGA2001
  635.      = T  132x44  8x8          16       2    B800 Ahead B
  636.      = T  132x44          16             Orchid Prodesigner VGA
  637.      = T  132x43                     Allstar Peacock (VGA)
  638.      = G   80x43  8x8    720x348     mono        B800 DESQview 2.x+Hercules [3]
  639.  23h = T  132x25  6x14                     Tseng Labs EVA
  640.      = T  132x25  8x14         16/256       4    B800 Tseng ET4000 chipset
  641.      = T  132x25  8x14                     Ahead Systems EGA2001
  642.      = T  132x25  8x14          16       4    B800 Ahead B
  643.      = T  132x25  8x8          16        B800 ATI EGA Wonder,ATI VIP
  644.      = T  132x25                     Cirrus 5320 chipset
  645.      = T  132x28                     Allstar Peacock (VGA)
  646.      = T  132x28          16             Orchid Prodesigner VGA
  647.  24h = T  132x25                     Allstar Peacock (VGA)
  648.      = T  132x25          16             Orchid Prodesigner VGA
  649.      = T  132x28  6x13                     Tseng Labs EVA
  650.      = T  132x28  8x13         16/256       4    B800 Tseng ET4000 chipset
  651.      = T  132x28  8x12          16       1    B800 Ahead B
  652.      = T  132x28                     Cirrus 5320 chipset
  653.  25h = G   80x60  8x8    640x480                 Tseng Labs EVA
  654.      = G   80x60  8x8    640x480     16/256       1    A000 Tseng ET4000 chipset
  655.      = G        640x480      16             VEGA VGA
  656.      = G   80x60  8x8    640x480      16        A000 Orchid Prodesigner VGA
  657.      = G   80x60  8x8    640x480      16       1    A000 Ahead B (same as 26h)
  658.      = G        640x480      16             NEC GB-1
  659.      = G        640x480      16             Cirrus 5320 chipset
  660.      = G        640x400     256             Realtek RTVGA
  661.  26h = T   80x60  8x8                     Tseng Labs EVA
  662.      = T   80x60  8x8         16/256       2    B800 Tseng ET4000 chipset
  663.      = T   80x60                     Allstar Peacock (VGA)
  664.      = T   80x60          16             Orchid ProDesigner VGA
  665.      = G   80x60  8x8    640x480                 Ahead Systems EGA2001
  666.      = G   80x60  8x8    640x480      16       1    A000 Ahead B (same as 25h)
  667.      = G        640x480     256             Realtek RTVGA
  668.  27h = T  132x25  8x8         mono        B000 ATI EGA Wonder,ATI VIP
  669.      = G        720x512      16             VEGA VGA
  670.      = G        720x512      16             Genoa
  671.      = G        800x600     256             Realtek RTVGA
  672.  28h = T  ???x???                     VEGA VGA
  673.      = G           1024x768     256             Realtek RTVGA (1meg)
  674.  29h = G        800x600      16             VEGA VGA
  675.      = G  100x37  8x16    800x600      16        A000 Orchid
  676.      = G        800x600      16        A000 STB,Genoa,Sigma
  677.      = G        800x600      16             Allstar Peacock (VGA)
  678.      = G  100x37  8x16    800x600     16/256       1    A000 Tseng ET3000/4000 chipset
  679.      = G        800x600     ???             EIZO MDB10
  680.      = G        800x600      16             Cirrus 5320 chipset
  681.  2Ah = T  100x40                     Allstar Peacock (VGA)
  682.      = T  100x40  8x16          16             Orchid Prodesigner VGA
  683.      = T  100x40  8x15        16/256       4    B800 Tseng ET4000 chipset
  684.      = G           1280x1024 256             Realtek RTVGA
  685.  2Dh = G        640x350     256             VEGA VGA
  686.      = G        640x350 256/256k    A000 Orchid, Genoa, STB
  687.      = G   80x25  8x14    640x350 256/256k   1    A000 Tseng ET3000/4000 chipset
  688.      = G        640x350     256             Cirrus 5320 chipset
  689.  2Eh = G        640x480     256             VEGA VGA
  690.      = G   80x30  8x16    640x480 256/256k    A000 Orchid
  691.      = G        640x480 256/256k    A000 STB,Genoa,Sigma
  692.      = G   80x30  8x16    640x480 256/256k   1    A000 Tseng ET3000/4000 chipset
  693.  2Fh = T  160x50  8x8  1280x400      16       4    B800 Ahead B (Wizard/3270)
  694.      = G        720x512     256             VEGA VGA
  695.      = G        720x512     256             Genoa
  696.      = G   80x25  8x16    640x400 256/256k   1    A000 Tseng ET4000 chipset
  697.  30h = G        800x600     256             VEGA VGA
  698.      = G  100x37  8x16    800x600 256/256k    A000 Orchid 
  699.      = G        800x600 256/256k    A000 STB,Genoa,Sigma
  700.      = G        720x350       2             3270 PC
  701.      = G        800x600     256             Cardinal
  702.      = G        ???x???            B800 AT&T 6300
  703.      = G  100x37  8x16    800x600 256/256k   1    A000 Tseng ET3000/4000 chipset
  704.  32h = T   80x34  8x10          16       4    B800 Ahead B (Wizard/3270)
  705.  33h = T  132x44  8x8          16        B800 ATI EGA Wonder,ATI VIP
  706.      = T   80x34  8x8          16       4    B800 Ahead B (Wizard/3270)
  707.  34h = T   80x66  8x8          16       4    B800 Ahead B (Wizard/3270)
  708.  36h = G        960x720      16             VEGA VGA
  709.      = G        960x720      16             STB
  710.      = G        960x720      16             Tseng ET3000 only
  711.  37h = T  132x44  8x8         mono        B800 ATI EGA Wonder,ATI VIP
  712.      = G           1024x768      16             VEGA VGA
  713.      = G  128x48  8x16 1024x768      16        A000 Orchid
  714.      = G           1024x768      16        A000 STB,Genoa,Sigma
  715.      = G           1024x768      16             Definicon
  716.      = G  128x48  8x16 1024x768      16       1    A000 Tseng ET3000/4000
  717.  38h = G           1024x768     256             STB VGA/EM-16 Plus (1MB)
  718.      = G  128x48  8x16 1024x768 256/256k   1    A000 Tseng ET4000 chipset
  719.      = G           1024x768     256             Orchid ProDesigner II
  720.  3Dh = G           1280x1024  16             Definicon
  721.      = G  128x64  8x16 1280x1024  16       1    A000 Tseng ET4000 v3.00 [6,8]
  722.  3Eh = G           1280x961      16             Definicon
  723.  40h = T   80x43                     VEGA VGA, Tecmar VGA/AD
  724.      = T   80x43                     Video7 V-RAM VGA
  725.      = T   80x43                     Tatung VGA
  726.      = T  100x30          16             MORSE VGA
  727.      = T  100x30                     Cirrus 510/520 chipset
  728.      = T   80x25    720x350     mono             Genoa SuperEGA BIOS 3.0+
  729.      = G   80x25  8x16    640x400       2       1    B800 AT&T 6300, AT&T VDC600
  730.      = G   80x25  8x16    640x400       2       1    B800 Compaq Portable
  731.  41h = T  132x25                     VEGA VGA
  732.      = T  132x25                     Tatung VGA
  733.      = T  132x25                     Video7 V-RAM VGA
  734.      = T  100x50          16             MORSE VGA
  735.      = T  100x50                     Cirrus 510/520 chipset
  736.      = T   80x34  9x14    720x476     16/256k    B800 WD90C
  737.      = G        640x200      16       1         AT&T 6300
  738.      = G   80x25    720x348     mono        B000 Genoa SuperEGA BIOS 3.0+
  739.  42h = T  132x43                     VEGA VGA
  740.      = T  132x43                     Tatung VGA
  741.      = T  132x43                     Video7 V-RAM VGA
  742.      = T   80x34  9x10           4       4    B800 Ahead B (Wizard/3270)
  743.      = T  100x60          16             MORSE VGA
  744.      = T  100x60                     Cirrus 510/520 chipset
  745.      = G   80x25  8x16    640x400      16             AT&T 6300, AT&T VDC600
  746.      = G   80x25    720x348     mono        B800 Genoa SuperEGA BIOS 3.0+
  747.  43h = T   80x60                     VEGA VGA
  748.      = T   80x60                     Tatung VGA
  749.      = T   80x60                     Video7 V-RAM VGA
  750.      = T   80x45  9x8           4       4    B800 Ahead B (Wizard/3270)
  751.      = T  100x75          16             MORSE VGA
  752.      = T   80x29    720x348     mono             Genoa SuperEGA BIOS 3.0+
  753.      = G         640x200 of 640x400 viewport     AT&T 6300 (unsupported)
  754.  44h =     disable VDC and DEB output             AT&T 6300
  755.      = T  100x60                     VEGA VGA
  756.      = T  100x60                     Tatung VGA
  757.      = T  100x60                     Video7 V-RAM VGA
  758.      = T   80x32    720x352     mono             Genoa SuperEGA BIOS 3.0+
  759.  45h = T  132x28                     Tatung VGA
  760.      = T  132x28                     Video7 V-RAM VGA
  761.      = T   80x44    720x352     mono             Genoa SuperEGA BIOS 3.0+
  762.  46h = T  132x25  8x14         mono             Genoa 6400
  763.      = T  132x25  9x14         mono             Genoa SuperEGA BIOS 3.0+
  764.      = G  100x40  8x15    800x600       2             AT&T VDC600
  765.  47h = T  132x29  8x12         mono             Genoa 6400
  766.      = T  132x29  9x12         mono             Genoa SuperEGA BIOS 3.0+
  767.      = T  132x28  9x16 1188x448     16/256k    B800 WD90C
  768.      = G  100x37  8x16    800x600      16             AT&T VDC600
  769.  48h = T  132x32  8x12         mono             Genoa 6400
  770.      = T  132x32  9x11         mono             Genoa SuperEGA BIOS 3.0+
  771.      = G   80x50  8x8    640x400       2        B800 AT&T 6300, AT&T VDC600
  772.  49h = T  132x44  8x8         mono             Genoa 6400
  773.      = T  132x44  9x8         mono             Genoa SuperEGA BIOS 3.0+
  774.      = G   80x30  8x16    640x480                 Lava Chrome II EGA
  775.  4Dh = T  120x25                     VEGA VGA
  776.  4Eh = T  120x43                     VEGA VGA
  777.      = T   80x60  8x8         16/256k    B800 Oak OTI-067/OTI-077 [7]
  778.  4Fh = T  132x25                     VEGA VGA
  779.      = T  132x60                     some Oak Tech VGA [7]
  780.  50h = T   80x30  8x16         16/256k    B800 Trident TVGA 8800/8900
  781.      = T   80x34                     Lava Chrome II EGA
  782.      = T   80x43         mono             VEGA VGA
  783.      = T  132x25  9x14         mono             Ahead Systems EGA2001
  784.      = T  132x25  9x14           4       4    B800 Ahead B
  785.      = T  132x25  8x14          16       8    B800 OAK Technologies VGA-16
  786.      = T  132x25  8x14         16/256k    B800 Oak OTI-037/067/077 [7]
  787.      = T  132x30          16             MORSE VGA
  788.      = T  132x30                     Cirrus 510/520 chipset
  789.      = G   80x30  8x16    640x480      16             Paradise EGA-480
  790.      = G   80x30  8x16    640x480      16             NEL Electronics BIOS
  791.      = G        640x480     mono???         Taxan 565 EGA
  792.      = G   40x25  8x8    320x200                 Genoa SuperEGA BIOS 3.0+
  793.  51h = T   80x30  8x16                     Paradise EGA-480
  794.      = T   80x30  9x16                     NEL Electronics BIOS
  795.      = T   80x30                     Lava Chrome II EGA
  796.      = T   80x43  8x11         16/256k    B800 Trident TVGA 8800/8900
  797.      = T  132x25         mono             VEGA VGA
  798.      = T  132x43  8x8          16       5    B800 OAK Technologies VGA-16
  799.      = T  132x43  8x8        16/256k        B800 Oak OTI-037/067/077
  800.      = T  132x28  9x12           4       4    B800 Ahead B
  801.      = T  132x50          16             MORSE VGA
  802.      = T  132x50                     Cirrus 510/520 chipset
  803.      = G   80x34  8x14    640x480      16             ATI EGA Wonder
  804.      = G   80x25  8x8    640x200                 Genoa SuperEGA BIOS 3.0+
  805.  52h = T   80x60                     Lava Chrome II EGA
  806.      = T   80x60  8x8         16/256k    B800 Trident TVGA 8800/8900
  807.      = T  132x43         mono             VEGA VGA
  808.      = T  132x44  9x8         mono             Ahead Systems EGA2001
  809.      = T  132x44  9x8           4       2    B800 Ahead B
  810.      = T  132x60          16             MORSE VGA
  811.      = T  132x60                     Cirrus 510/520 chipset
  812.      = G   94x29  8x14    752x410      16             ATI EGA Wonder
  813.      = G  100x75  8x8    800x600      16       1    A000 OAK Technologies VGA-16
  814.      = G  100x75  8x8    800x600      16        A000 Oak OTI-037 chipset [7]
  815.      = G  100x37  8x16    800x600      16        A000 Oak OTI-067/077 chips [7]
  816.      = G  128x30  8x16 1024x480      16             NEL Electronics BIOS
  817.  53h = T   80x25  8x16                     NEL Electronics BIOS
  818.      = T   80x60          16             MORSE VGA
  819.      = T   80x60                     Cirrus 510/520 chipset
  820.      = T  132x25  8x14         16/256k    B800 Trident TVGA 8800/8900
  821.      = T  132x43                     Lava Chrome II EGA
  822.      = G        640x480     256             Oak VGA
  823.      = G   80x30  8x16    640x480     256        A000 Oak OTI-067/OTI-077 [7]
  824.      = G  100x40  8x14    800x560      16             ATI EGA Wonder,ATI VIP
  825.      = G                         AX PC
  826.  54h = T  132x25                     Lava Chrome II EGA
  827.      = T  132x30  8x16         16/256k    B800 Trident TVGA 8800/8900
  828.      = T  132x43  8x8                     Paradise EGA-480
  829.      = T  132x43  8x8                     NEL Electronics BIOS
  830.      = T  132x43  7x9         16/256k    B800 Paradise VGA
  831.      = T  132x43  8x9         16/256k    B800 Paradise VGA on multisync
  832.      = T  132x43                     Taxan 565 EGA
  833.      = T  132x43                     AST VGA Plus
  834.      = T  132x43                     Hewlett-Packard D1180A
  835.      = T  132x43  7x9          16             AT&T VDC600
  836.      = T  132x50  8x8          16        A000 NCR 77C22 [9]
  837.      = T  132x43  9x9  1188x387     16/256k    B800 WD90C
  838.      = G  100x42  8x14    800x600      16        A000 ATI EGA Wonder, VGA Wonder
  839.      = G  100x42  8x14    800x600      16        A000 ATI Ultra 8514A, ATI XL
  840.      = G        800x600     256        A000 Oak VGA    
  841.      = G  100x37  8x16    800x600     256        A000 Oak OTI-067/077 chips [7]
  842.  55h = T   80x66  8x8         16/256k    A000 ATI VIP
  843.      = T  132x25  8x14                     Paradise EGA-480
  844.      = T  132x25  8x14                     NEL Electronics BIOS
  845.      = T  132x25  7x16         16/256k    B800 Paradise VGA
  846.      = T  132x25  8x16         16/256k    B800 Paradise VGA on multisync
  847.      = T  132x25                     Taxan 565 EGA
  848.      = T  132x25                     AST VGA Plus
  849.      = T  132x25                     Hewlett-Packard D1180A
  850.      = T  132x25  7x16          16             AT&T VDC600
  851.      = T  132x25  8x16          16        A000 NCR 77C22 [9]
  852.      = T  132x43  8x11         16/256k    B800 Trident TVGA 8800/8900
  853.      = T  132x25  9x16 1188x400     16/256k    B800 WD90C
  854.      = G   94x29  8x14    752x410                 Lava Chrome II EGA
  855.      = G  128x48  8x16 1024x768     16/256k    A000 ATI VGA Wonder v4+     [4]
  856.      = G           1024x768     16/256k         ATI VGA Wonder Plus
  857.      = G           1024x768     16/256k         ATI Ultra 8514A,ATI XL
  858.      = G  128x48  8x16 1024x768       4        A000 Oak OTI-067/077 chips [7]
  859.  56h = T  132x43  8x8           3???       2    B000 NSI Smart EGA+
  860.      = T  132x43  7x9           4        B000 Paradise VGA
  861.      = T  132x43  8x9           4        B000 Paradise VGA on multisync
  862.      = T  132x43         mono             Taxan 565 EGA
  863.      = T  132x43  7x9           2             AT&T VDC600
  864.      = T  132x43  9x8                     NEL Electronics BIOS
  865.      = T  132x50  8x8           4        A000 NCR 77C22 [9]
  866.      = T  132x60  8x8         16/256k    B800 Trident TVGA 8800/8900
  867.      = G           1024x768      16        A000 Oak VGA
  868.      = G  128x48  8x16 1024x768      16        A000 Oak OTI-067/077 chips [7]
  869.  57h = T  132x25  8x14           3???       4    B000 NSI Smart EGA+
  870.      = T  132x25  7x16           4        B000 Paradise VGA
  871.      = T  132x25  8x16           4        B000 Paradise VGA on multisync
  872.      = T  132x25  9x14                     NEL Electronics BIOS
  873.      = T  132x25         mono             Taxan 565 EGA
  874.      = T  132x25  7x16           2             AT&T VDC600
  875.      = T  132x25  9x14         16/256k    B800 Trident TVGA 8800/8900
  876.      = T  132x25  8x16           4        A000 NCR 77C22 [9]
  877.      = G   96x48  8x16    768x1024  16        A000 Oak OTI-067/077 chips [7]
  878.  58h = T   80x33  8x14          16        B800 ATI EGA Wonder,ATI VIP
  879.      = T   80x32  9x16          16             Genoa 6400
  880.      = T   80x43  8x8                     NEL Electronics BIOS
  881.      = T  132x30  9x16         16/256k    B800 Trident TVGA 8800/8900
  882.      = G  100x75  8x8    800x600     16/256k    A000 Paradise VGA
  883.      = G  100x75  8x8    800x600      16             AT&T VDC600
  884.      = G        800x600      16             AST VGA Plus, Compaq VGA
  885.      = G        800x600      16             Dell VGA
  886.      = G        800x600      16             Hewlett-Packard D1180A
  887.      = G        800x600     ???             ELT VGA PLUS 16
  888.      = G  100x75  8x8    800x600      16        A000 NCR 77C22 [9]
  889.      = G  160x64  8x16 1280x1024  16        A000 Oak OTI-077 chipset [7]
  890.      = G  100x75  8x8    800x600     16/256k    A000 Paradise VGA, WD90C
  891.  59h = T   80x43  9x8                     NEL Electronics BIOS
  892.      = T   80x66  8x8         16/256k    A000 ATI VIP
  893.      = T  132x43  9x11         16/256k    B800 Trident TVGA 8800/8900
  894.      = G  100x75  8x8    800x600       2        A000 Paradise VGA
  895.      = G  100x75  8x8    800x600       2             AT&T VDC600
  896.      = G        800x600       2             AST VGA Plus, Compaq VGA
  897.      = G        800x600       2             Dell VGA
  898.      = G        800x600       2             Hewlett-Packard D1180A
  899.      = G  100x75  8x8    800x600       2        A000 NCR 77C22 [9]
  900.      = G  128x48  8x16 1024x768     256        A000 Oak OTI-077 chipset [7]
  901.  5Ah = T   80x60  8x8                     NEL Electronics BIOS
  902.      = T  132x60  9x8         16/256k    B800 Trident TVGA 8800/8900
  903.      = G  128x48  8x16 1024x768       2        A000 NCR 77C22 [9]
  904.  5Bh = T   80x30  8x16                B800 ATI VGA Wonder (undoc)
  905.      = G        640x350     256             Genoa 6400
  906.      = G   80x25  8x16    640x400      32K        A000 Oak OTI-067/077 chips [7]
  907.      = G        800x600      16             Maxxon, SEFCO TVGA, Imtec
  908.      = G  100x75  8x8    800x600     16/256k    A000 Trident TVGA 8800, 8900
  909.      = G        800x600     ???             Vobis MVGA
  910.      = G  100x37  8x16    800x600                 NEL Electronics BIOS
  911.      = G  128x48  8x16 1024x768      16        A000 NCR 77C22 [8,9]
  912.  5Ch = T  100x37  8x16                     NEL Electronics BIOS
  913.      = G        640x400     256             Logix, ATI Prism Elite
  914.      = G        640x400     256             Maxxon, SEFCO TVGA, Imtec
  915.      = G   80x25  8x16    640x400     256/256k    A000 Zymos Poach, Hi Res 512
  916.      = G   80x25  8x16    640x400     256/256k    A000 Trident TVGA 8800/8900
  917.      = G   80x30  8x16    640x480     256             Genoa 6400
  918.      = G   80x30  8x16    640x480      32K        A000 Oak OTI-077 chipset [7]
  919.      = G  100x75  8x8    800x600     256        A000 NCR 77C22 [9]
  920.      = G  100x75  8x8    800x600     256/256k    A000 WD90C
  921.  5Dh = T  100x75  8x8                     NEL Electronics BIOS
  922.      = G        640x480     256             Logix, ATI Prism Elite
  923.      = G        640x480     256             Maxxon, SEFCO TVGA, Imtec
  924.      = G   80x30  8x16    640x480     256/256k    A000 Zymos Poach, Hi Res 512
  925.      = G   80x30  8x16    640x480     256/256k    A000 Trident TVGA 8800 (512K)
  926.      = G  128x48  8x16 1024x768      16        A000 NCR 77C22 [9]
  927.      = G  128x48  8x16 1024x768      16/256k    A000 WD90C
  928.  5Eh = G        640x400     256             Paradise VGA,VEGA VGA
  929.      = G        640x400     256             AST VGA Plus, NCR 77C22
  930.      = G        640x400     256             Compaq VGA, Dell VGA
  931.      = G   80x25  8x16    640x400     256             AT&T VDC600
  932.      = G   80x25  8x16    640x400     256        A000 NCR 77C22 [9]
  933.      = G        800x600      16             Logix, ATI Prism Elite
  934.      = G  100x37  8x16    800x600      16             NEL Electronics BIOS
  935.      = G  100x75  8x8    800x600     256             Genoa 6400
  936.      = G  100x75  8x8    800x600     256/256k    A000 Zymos Poach, Trident 8900
  937.      = G  100x75  8x8    800x600     256/256k    A000 Hi Res 512
  938.      = G   80x25  8x16    640x400     256/256k    A000 WD90C
  939.  5Fh = G        640x480     256             Paradise VGA
  940.      = G        640x480     256             AST VGA Plus, NCR 77C22
  941.      = G        640x480     256             Compaq VGA, Dell VGA
  942.      = G        640x480     256             Hewlett-Packard D1180A
  943.      = G   80x30  8x16    640x480     256             AT&T VDC600 (512K)
  944.      = G   80x30  8x16    640x480     256        A000 NCR 77C22 [9]
  945.      = G           1024x768      16             Logix, ATI Prism Elite
  946.      = G           1024x768      16             Maxxon, Imtec
  947.      = G  128x48  8x16 1024x768      16             Genoa 6400
  948.      = G  128x48  8x16 1024x768      16/256k    A000 Zymos Poach, Hi Res 512
  949.      = G  128x48  8x16 1024x768      16/256k    A000 Trident TVGA 88/8900 512K
  950.      = G   80x30  8x16    640x480     256/256k    A000 WD90C
  951.  60h = T  132x25  8x14          16/64       8    B800 Quadram Ultra VGA
  952.      = T  132x25  8x14          16             Genoa 6400
  953.      = T  132x25  8x14          16             Genoa SuperEGA BIOS 3.0+
  954.      = T  132x25                     Cirrus 5320 chipset
  955.      = G   80x???    ???x400                 Corona/Cordata BIOS 4.10+
  956.      = G   80x25  8x16    640x400     256       1    A000 Ahead A, Ahead B
  957.      = G        752x410                 VEGA VGA
  958.      = G        752x410      16             Tatung VGA
  959.      = G        752x410      16             Video7 V-RAM VGA
  960.      = G  128x48  8x16 1024x768       4/256k    A000 Trident TVGA 8900
  961.      = G  128x48  8x16 1024x768     256/256k    A000 WD90C
  962.  61h = T  132x29  8x12          16/64       8    B800 Quadram Ultra VGA
  963.      = T  132x29  8x8          16             Genoa 6400
  964.      = T  132x29  8x8          16             Genoa SuperEGA BIOS 3.0+
  965.      = T  132x50                     Cirrus 5320 chipset
  966.      = G        ???x400                 Corona/Cordata BIOS 4.10+
  967.      = G   80x25  8x16    640x400     256        A000 ATI VGA Wonder,VGA Wonder+
  968.      = G   80x25  8x16    640x400     256        A000 ATI Ultra 8514A,ATI XL
  969.      = G   80x30  8x16    640x480     256       1    A000 Ahead A, Ahead B (512K)
  970.      = G        720x540                 VEGA VGA
  971.      = G        720x540      16             Tatung VGA
  972.      = G        720x540      16             Video7 V-RAM VGA
  973.      = G   96x64  8x16    768x1024  16/256k    A000 Trident TVGA 88/8900 512K
  974.      = G  128x48  8x16 1024x768     256        A000 NCR 77C22 [8,9]
  975.  62h = T  132x32  8x11          16/64       6    B800 Quadram Ultra VGA
  976.      = T  132x32  8x12          16             Genoa 6400
  977.      = T  132x32  8x11          16             Genoa SuperEGA BIOS 3.0+
  978.      = G        640x450      16             Cirrus 510/520 chipset
  979.      = G   80x30  8x16    640x480     256        A000 ATI VGA Wonder,VGA Wonder+
  980.      = G   80x30  8x16    640x480     256        A000 ATI Ultra 8514A,ATI XL
  981.      = G        800x600                 VEGA VGA
  982.      = G        800x600      16             Tatung VGA
  983.      = G        800x600      16             Video7 V-RAM VGA
  984.      = G  100x75  8x8    800x600     256       1    A000 Ahead A, Ahead B (512K)
  985.      = G  128x48  8x16 1024x768     256/256k    A000 Trident TVGA 8900, Zymos
  986.      = G  128x48  8x16 1024x768     256        A000 NCR 77C22 [9]
  987.      = G        640x480     32K        A000 WD90C
  988.  63h = T  132x44  8x8          16/64       5    B800 Quadram Ultra VGA
  989.      = T  132x44  8x8          16             Genoa 6400
  990.      = T  132x44  8x8          16             Genoa SuperEGA BIOS 3.0+
  991.      = G        720x540      16             MORSE VGA
  992.      = G        720x540      16             Cirrus 510/520 chipset
  993.      = G  100x42  8x14    800x600     256        A000 ATI VGA Wonder,VGA Wonder+
  994.      = G  100x42  8x14    800x600     256        A000 ATI Ultra 8514A,ATI XL
  995.      = G  128x48  7x16 1024x768     256       1    A000 Ahead B (1MB)
  996.      = G           1024x768       2             Video7 V-RAM VGA
  997.      = G        800x600     32K        A000 WD90C
  998.  64h = T  132x60  8x8          16             Genoa 6400
  999.      = G        800x600      16             MORSE VGA
  1000.      = G        800x600      16             Cirrus 510/520 chipset
  1001.      = G        800x600     ???             SAMPO-Mira VGA
  1002.      = G           1024x768       4             Video7 V-RAM VGA
  1003.      = G  128x48  8x16 1024x768     256        A000 ATI VGA Wonder Plus,ATI XL
  1004.      = G  160x64  8x16 1280x1024 16/256k    A000 WD90C [8]
  1005.  65h = G           1024x768      16             Video7 V-RAM VGA
  1006.      = G  128x48  8x16 1024x768      16        A000 ATI VGA Wonder
  1007.  66h = G        640x400     256             Tatung VGA
  1008.      = G        640x400     256             Video7 V-RAM VGA
  1009.      = T   80x50  8x8    640x400     16/256k    B800 WD90C
  1010.  67h = G        640x480     256             Video7 V-RAM VGA
  1011.      = G  128x48  8x16 1024x768       4        A000 ATI VGA Wonder
  1012.      = G  160x64  8x16 1280x1024  16        A000 NCR 77C22 [8,9]
  1013.      = T   80x43  8x8    640x344     16/256k    B800 WD90C
  1014.  69h = G        720x540     256             Video7 V-RAM VGA
  1015.      = T  132x50  8x8  1056x400     16/256k    B800 WD90C
  1016.  6Ah = G        800x600      16        A000 VESA standard interface
  1017.      = G  100x75  8x8    800x600      16             Genoa 6400
  1018.      = G        800x600      16        A000 Ahead A
  1019.      = G  100x75  8x8    800x600      16       1    A000 Ahead B (VESA) (see 71h)
  1020.      = G        800x600      16             Zymos Poach, Hi Res 512
  1021.      = G        800x600      16             Epson LT-386SX in CRT Mode
  1022.      = G        800x600      16             Compuadd 316SL in CRT Mode
  1023.      = G  100x42  8x14    800x600            A000 ATI VGA Wonder (undoc)
  1024.      = G  160x64  8x16 1280x1024 256        A000 NCR 77C22 [8,9]
  1025.  6Bh = T  100x37  8x16          16             Genoa 6400
  1026.      = T  100x37  8x16                     NEL Electronics BIOS
  1027.  6Ch = G  100x75  8x8    800x600     256             Genoa 6400
  1028.      = G  160x60  8x16 1280x960     16/256k    A000 WD90C [8]
  1029.  70h =     extended mode set (see AX=0070h)         Everex Micro Enhancer EGA
  1030.      = T   40x25  8x8          16       8    B800 Quadram (CGA double scan)
  1031.      = T   40x25  8x8    (CGA dblscan)             Genoa SuperEGA BIOS 3.0+
  1032.      = G        360x480     256             Cirrus 510/520/5320 chips
  1033.      = G   90x28  8x14    720x392      16       1    A000 Ahead B
  1034.      = G        800x600      16             C&T chipset, Cardinal
  1035.  71h = T   80x25  8x8          16       8    B800 Quadram (CGA double scan)
  1036.      = T   80x25  8x8    (CGA dblscan)             Genoa SuperEGA BIOS 3.0+
  1037.      = G        528x400     256             Cirrus 510/520 chipset
  1038.      = G  100x35  8x16    800x600     16of64        A000 NSI Smart EGA+
  1039.      = G  100x75  8x8    800x600      16       1    A000 Ahead B (same as 6Ah)
  1040.      = G        960x720      16             C&T chipset, Cardinal
  1041.  72h = T   80x60  8x8          16        B800 Quadram Ultra VGA
  1042.      = T   80x60  8x8          16        B800 Genoa 6400
  1043.      = T   80x60  8x8          16        B800 Genoa SuperEGA BIOS 3.0+
  1044.      = G        528x480     256             Cirrus 510/520 chipset
  1045.      = G        640x480 32768        A000 ATI
  1046.      = G           1024x768      16             C&T chipset, Cardinal
  1047.      = G        640x480     16M        A000 WD90C
  1048.  73h = G   80x60  8x8    640x480      16        A000 Quadram Ultra VGA
  1049.      = G   80x60  8x8    640x480      16             Genoa 6400
  1050.      = G   80x60  8x8    640x480      16             Genoa SuperEGA BIOS 3.0+
  1051.  74h = T   80x66  8x8          16        B800 Quadram Ultra VGA
  1052.      = T   80x66  8x8          16        B800 Genoa 6400
  1053.      = T   80x66  8x8          16        B800 Genoa SuperEGA BIOS 3.0+
  1054.      = G        640x400       2        B800 Toshiba 3100 AT&T mode
  1055.      = G  128x48  8x16 1024x768      16       1    A000 Ahead A, Ahead B (512K)
  1056.  75h = G  128x48  8x16 1024x768       4       1    A000 Ahead B
  1057.      = G   80x66    640x528      16???        A000 Quadram Ultra VGA
  1058.      = G   80x66    640x528      16             Genoa SuperEGA BIOS 3.0+
  1059.  76h = T   94x29  8x14          16        B800 Quadram Ultra VGA
  1060.      = T   94x29  8x14                     Genoa SuperEGA BIOS 3.0+
  1061.      = G  128x48  8x16 1024x768       2       1    A000 Ahead B
  1062.  77h = G   94x29    752x410      16???        A000 Quadram Ultra VGA
  1063.      = G   94x29    752x410      16             Genoa SuperEGA BIOS 3.0+
  1064.  78h = T  100x37  8x16          16             Genoa 6400
  1065.      = T  100x75  8x8          16        B800 Quadram Ultra VGA
  1066.      = T  100x75  8x8                     Genoa SuperEGA BIOS 3.0+
  1067.      = G        640x400     256             STB VGA/EM-16 Plus
  1068.      = G        640x400     256             Cardinal, C&T chipset
  1069.      = G        640x400     256             Cirrus 5320 chipset
  1070.  79h = G        640x480     256             Cardinal, C&T chipset
  1071.      = G  100x75    800x600      16???        A000 Quadram Ultra VGA
  1072.      = G  100x75  8x8    800x600      16             Genoa SuperEGA BIOS 3.0+
  1073.      = G  100x75  8x8    800x600      16             Genoa 6400
  1074.  7Ah = T  114x60  8x8          16        B800 Quadram Ultra VGA
  1075.      = T  114x60  8x8                     Genoa SuperEGA BIOS 3.0+
  1076.      = G        720x540     256             C&T chipset, Cardinal
  1077.  7Bh = G        800x600     256             C&T chipset, Cardinal
  1078.      = G  114x60    912x480      16???        A000 Quadram Ultra VGA
  1079.      = G        912x480      16             Genoa SuperEGA BIOS 3.0+
  1080.  7Ch = G        512x512      16             Genoa
  1081.  7Dh = G   64x32  8x16    512x512     256             Genoa
  1082.  7Eh =     special mode set (see AX=007Eh)         Paradise VGA, AT&T VDC600
  1083.      = G   80x25  8x16    640x400     256             Genoa 6400
  1084.  7Fh =     special function set (see AX=007Fh)         Paradise VGA, AT&T VDC600
  1085.      = G  128x48  8x16 1024x768       4             Genoa 6400
  1086.  82h = T   80x25         B&W             AT&T VDC overlay mode [5]
  1087.  83h = T   80x25                     AT&T VDC overlay mode [5]
  1088.  86h = G        640x200     B&W             AT&T VDC overlay mode [5]
  1089.  88h = G   90x43  8x8    720x352     mono        B000 Hercules + MSHERC.COM
  1090.  C0h = G        640x400     2/prog pallet         AT&T VDC overlay mode [5]
  1091.  C4h =     disable output                     AT&T VDC overlay mode [5]
  1092.  D0h = G        640x400       2        B800 DEC VAXmate AT&T mode
  1093. Notes:
  1094. [1] for ATI EGA Wonder, mode 08h is only valid if SMS.COM is loaded resident.
  1095.       SMS maps mode 08h to mode 27h if the byte at location 0040:0063 is 0B4h,
  1096.       otherwise to mode 23h, thus selecting the appropriate (monochrome or
  1097.       color) 132x25 character mode.
  1098.     for ATI VGA Wonder, mode 08h is the same, and only valid if VCONFIG loaded
  1099.       resident
  1100. [2] early XGA boards support 132-column text but do not have this BIOS mode
  1101. [3] DESQview intercepts calls to change into these two modes (21h is page 0,
  1102.       22h is page 1) even if there is no Hercules graphics board installed
  1103. [4] ATI BIOS v4-1.00 has a text-scrolling bug in this mode
  1104. [5] for AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h,
  1105.       40h, or 44h
  1106. [6] BIOS text support is broken in this undocumented mode; scrolling moves only
  1107.       about 1/3 of the screen (and does even that portion incorrectly), while
  1108.       screen clears only clear about 3/4.
  1109. [7] The Oak OTI-037/067/077 modes are present in the Oak VGA BIOS, which OEMs
  1110.       may choose to use only partially or not at all; thus, not all Oak boards
  1111.       support all "Oak" modes listed here
  1112. [8] interlaced only
  1113. [9] this card uses the full 128K A000h-BFFFh range for the video buffer,
  1114.       precluding the use of a monochrome adapter in the same system
  1115. ----------100070-----------------------------
  1116. INT 10 - VIDEO - Everex Micro Enhancer EGA/Viewpoint VGA - EXTENDED MODE SET
  1117.     AX = 0070h
  1118.     BL = mode (see below)
  1119. SeeAlso: AH=00h,AX=6F05h,AX=7000h/BX=0004h,AH=FFh"GO32"
  1120.  
  1121. Values for video mode:
  1122.       text/ text pixel     pixel    colors    disp    scrn  monitor    adapter
  1123.       grph resol  box    resoltn        page    addr
  1124.  00h = G        640x480      16             multsync    EGA,VGA
  1125.  01h = G        752x410      16             multsync    EGA,VGA
  1126.  02h = G        800x600      16             multsync    EGA,VGA
  1127.  03h = T   80x34                     multsync    EGA,VGA
  1128.  04h = T   80x60                     multsync    EGA,VGA
  1129.  05h = T   94x29                     multsync    EGA only
  1130.  06h = T   94x51                     multsync    EGA only
  1131.  07h = T  100x43  8x14          16                VGA only
  1132.  08h = T  100x75  8x8          16                VGA only
  1133.  09h = T   80x44                     EGA    EGA only
  1134.  0Ah = T  132x25                     EGA    EGA,VGA
  1135.  0Bh = T  132x44                     EGA    EGA,VGA
  1136.  0Ch = T  132x25                     CGA    EGA only
  1137.  0Dh = T   80x44                     mono    EGA only
  1138.  0Eh = T  132x25                     mono
  1139.  0Fh = T  132x44                     mono
  1140.  10h =     reserved
  1141.  11h = G           1280x350       4                EGA only
  1142.  12h = G           1280x600       4                EGA only
  1143.  13h = G        640x350     256                EGA,EV673
  1144.  14h = G        640x400     256
  1145.  15h = G        512x480     256
  1146.  16h = T   80x30  8x16         256                VGA only
  1147.  18h = T  100x27  8x16          16                VGA only
  1148.  20h = G           1024x768      16                Everex 629,678
  1149.                                 Everex EV-673
  1150.  21h = T  160x64  8x16 1280x1024  16                1MB VGA only
  1151.  30h = G        640x480     256                Everex 629,678
  1152.                                 Everex EV-673
  1153.  31h = G        800x600     256                Everex 629,678
  1154.                                 Everex EV-673
  1155.  32h = G  128x48  8x16 1024x768     256                1MB VGA only
  1156.  40h = T  132x30  8x16          16                VGA only
  1157.  50h = T  132x32  8x16         mono                VGA only
  1158.  62h = G   40x25  8x8    320x200     32K                Vwpt TC (EV629)
  1159.  70h = G   64x30  8x16    512x480     32K                Viewpoint TC
  1160.  71h = G   80x30  8x16    640x480     32K                Viewpoint TC
  1161.  76h = G   64x30  8x16    512x480     16M                Viewpoint TC
  1162.  77h = G   80x30  8x16    640x480     16M                Viewpoint TC
  1163. ----------10007E-----------------------------
  1164. INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - SET SPECIAL MODE
  1165.     AX = 007Eh
  1166.     BX = horizontal dimension of the mode desired
  1167.     CX = vertical dimension of the mode desired
  1168.          (both BX/CX in pixels for graphics modes, rows for alpha modes)
  1169.     DX = number of colors of the mode desired (0000h for monochrome modes)
  1170. Return: BH = 7Eh if successful (Paradise VGA)
  1171.     AL = 7Eh if successful (AT&T VDC600)
  1172. SeeAlso: AH=00h,AX=0070h,AX=007Fh,AX=6F05h,AH=FFh"GO32"
  1173. ----------10007F-----------------------------
  1174. INT 10 - VIDEO - Paradise VGA, AT&T VDC600 - EXTENDED FUNCTIONS
  1175.     AX = 007Fh
  1176.     BH = function
  1177.         00h     set VGA operation
  1178.         01h     set non-VGA operation
  1179.         color modes (0,1,2,3,4,5,6) will set non-VGA CGA operation
  1180.         monochrome mode 7 will set non-VGA MDA/Hercules operation
  1181.         02h     query mode status
  1182.         Return: BL = 00h if operating in VGA mode, 01h if non-VGA mode
  1183.             CH = total video RAM size in 64k byte units
  1184.             CL = video RAM used by the current mode
  1185.         03h     lock current mode
  1186.         allows current mode (VGA or non-VGA) to survive re-boot
  1187.         04h     enter CGA mode (AT&T VDC600 only)
  1188.         05h     enter MDA mode (AT&T VDC600 only)
  1189.         0Ah,0Bh,0Ch,0Dh,0Eh,0Fh  WRITE PARADISE REGISTERS 0,1,2,3,4,5
  1190.         (port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh)
  1191.         BL = value to set in the paradise register
  1192.         1Ah,1Bh,1Ch,1Dh,1Eh,1Fh READ PARADISE REGISTERS 0,1,2,3,4,5
  1193.         (port 03CEh indices 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh)
  1194.         Return: BL = value of the paradise register
  1195.             BH = 7Fh if successful
  1196. Return: AL = 7Fh if successful (AT&T VDC600)
  1197. SeeAlso: AX=007Eh
  1198. ----------1001-------------------------------
  1199. INT 10 - VIDEO - SET TEXT-MODE CURSOR SHAPE
  1200.     AH = 01h
  1201.     CH = bit 7    should be zero
  1202.          bits 6,5 cursor blink
  1203.              (00=normal, 01=invisible, 10=erratic, 11=slow)
  1204.              (00=normal, other=invisible on EGA/VGA)
  1205.          bits 4-0 top scan line containing cursor
  1206.     CL = bottom scan line containing cursor (bits 0-4)
  1207. Notes:    buggy on EGA systems--BIOS remaps cursor shape in 43 line modes, but
  1208.       returns unmapped cursor shape
  1209.     UltraVision scales size to the current font height by assuming 14-line
  1210.       monochrome and 8-line color fonts; this call is not valid if cursor
  1211.       emulation has been disabled
  1212.     applications which wish to change the cursor by programming the
  1213.       hardware directly on EGA or above should call INT 10/AX=1130h or
  1214.       read 0040h:0085h first to determine the current font height
  1215. BUG:    AMI 386 BIOS and AST Premier 386 BIOS will lock up the system if AL
  1216.       is not equal to the current video mode
  1217. SeeAlso: AH=03h,AX=CD05h
  1218. ----------1002-------------------------------
  1219. INT 10 - VIDEO - SET CURSOR POSITION
  1220.     AH = 02h
  1221.     BH = page number
  1222.         0-3 in modes 2&3
  1223.         0-7 in modes 0&1
  1224.         0 in graphics modes
  1225.     DH = row (00h is top)
  1226.     DL = column (00h is left)
  1227. SeeAlso: AH=03h,AH=05h,INT 60/DI=030Bh
  1228. ----------1003-------------------------------
  1229. INT 10 - VIDEO - GET CURSOR POSITION AND SIZE
  1230.     AH = 03h
  1231.     BH = page number
  1232.         0-3 in modes 2&3
  1233.         0-7 in modes 0&1
  1234.         0 in graphics modes
  1235. Return: AX = 0000h (Phoenix BIOS)
  1236.     CH = start scan line
  1237.     CL = end scan line
  1238.     DH = row (00h is top)
  1239.     DL = column (00h is left)
  1240. Notes:    a separate cursor is maintained for each of up to 8 display pages
  1241.     many ROM BIOSes incorrectly return the default size for a color display
  1242.       (start 06h, end 07h) when a monochrome display is attached
  1243. SeeAlso: AH=01h,AH=02h
  1244. ----------1004-------------------------------
  1245. INT 10 - VIDEO - READ LIGHT PEN POSITION (except VGA)
  1246.     AH = 04h
  1247. Return: AH = light pen trigger flag
  1248.         00h not down/triggered
  1249.         01h down/triggered
  1250.         DH,DL = row,column of character light pen is on
  1251.         CH = pixel row (graphics modes 04h-06h)
  1252.         CX = pixel row (graphics modes with >200 rows)
  1253.         BX = pixel column
  1254. Notes:    on a CGA, returned column numbers are always multiples of 2 (320-
  1255.       column modes) or 4 (640-column modes)
  1256.     returned row numbers are only accurate to two lines
  1257. ----------1005-------------------------------
  1258. INT 10 - VIDEO -  SELECT ACTIVE DISPLAY PAGE
  1259.     AH = 05h
  1260.     AL = new page number (00h to number of pages - 1) (see AH=00h)
  1261. Note:    to determine whether the requested page actually exists, use AH=0Fh
  1262.       to query the current page after making this call
  1263. SeeAlso: AH=0Fh,AH=43h,AH=45h
  1264. ----------1005-------------------------------
  1265. INT 10 - VIDEO - PCjr - MANIPULATE CRT/CPU PAGE REGISTERS
  1266.     AH = 05h
  1267.     AL = subfunction
  1268.         80h read CRT and CPU page registers
  1269.         Return: BH = CRT page register
  1270.             BL = CPU page register
  1271.         81h set CPU page register
  1272.         BL = CPU page
  1273.         82h set CRT page register
  1274.         BH = CRT page
  1275.         83h set both CPU and CRT page registers
  1276.         BL = CPU page
  1277.         BH = CRT page
  1278. Notes:    the CPU page determines which 16K block of the first 128K of physical
  1279.       memory will be mapped at B800h by the hardware
  1280.     the CRT page determines the start address of the memory used by the
  1281.       video controller
  1282. ----------1005-------------------------------
  1283. INT 10 - VIDEO - Corona/Cordata BIOS v4.10+ - GRAPHICS BITMAP BUFFER
  1284.     AH = 05h
  1285.     AL =
  1286.         00h set address of graphics bitmap buffer (video modes 60h,61h)
  1287.         BX = segment of buffer
  1288.         0Fh get address of graphics bitmap buffer (video modes 60h,61h)
  1289.         Return: DX = segment of graphics bitmap buffer
  1290. ----------1006-------------------------------
  1291. INT 10 - VIDEO - SCROLL UP WINDOW
  1292.     AH = 06h
  1293.     AL = number of lines by which to scroll up (00h = clear entire window)
  1294.     BH = attribute used to write blank lines at bottom of window
  1295.     CH,CL = row,column of window's upper left corner
  1296.     DH,DL = row,column of window's lower right corner
  1297. Note:    affects only the currently active page (see AH=05h)
  1298. Warning: some implementations have a bug which destroys BP
  1299. SeeAlso: AH=07h,AH=72h,AH=73h,AX=7F07h,INT 50/AX=0014h
  1300. ----------1007-------------------------------
  1301. INT 10 - VIDEO - SCROLL DOWN WINDOW
  1302.     AH = 07h
  1303.     AL = number of lines by which to scroll down (00h=clear entire window)
  1304.     BH = attribute used to write blank lines at top of window
  1305.     CH,CL = row,column of window's upper left corner
  1306.     DH,DL = row,column of window's lower right corner
  1307. Note:    affects only the currently active page (see AH=05h)
  1308. Warning: some implementations have a bug which destroys BP
  1309. SeeAlso: AH=06h,AH=72h,AH=73h,INT 50/AX=0014h
  1310. ----------1008-------------------------------
  1311. INT 10 - VIDEO - READ CHARACTER AND ATTRIBUTE AT CURSOR POSITION
  1312.     AH = 08h
  1313.     BH = page number (00h to number of pages - 1) (see AH=00h)
  1314. Return: AH = attribute
  1315.         bit 7: blink
  1316.         bits 6-4: background color
  1317.             000 black
  1318.             001 blue
  1319.             010 green
  1320.             011 cyan
  1321.             100 red
  1322.             101 magenta
  1323.             110 brown
  1324.             111 white
  1325.         bits 3-0: foreground color
  1326.             0000 black     1000 dark gray
  1327.             0001 blue     1001 light blue
  1328.             0010 green     1010 light green
  1329.             0011 cyan     1011 light cyan
  1330.             0100 red     1100 light red
  1331.             0101 magenta     1101 light magenta
  1332.             0110 brown     1110 yellow
  1333.             0111 light gray     1111 white
  1334.     AL = character
  1335. Notes:    for monochrome displays, a foreground of 1 with background 0 is
  1336.       underlined 
  1337.     the blink bit may be reprogrammed to enable intense background colors
  1338.       using AX=1003h or by programming the CRT controller
  1339.     the foreground intensity bit (3) can be programmed to switch between
  1340.       character sets A and B on EGA and VGA cards, thus enabling 512
  1341.       simultaneous characters on screen.  In this case the bit's usual
  1342.       function (intensity) is regularly turned off.
  1343. SeeAlso: AH=09h,AX=1003h,AX=5001h
  1344. ----------1009-------------------------------
  1345. INT 10 - VIDEO - WRITE CHARACTER AND ATTRIBUTE AT CURSOR POSITION
  1346.     AH = 09h
  1347.     AL = character to display
  1348.     BH = page number (00h to number of pages - 1) (see AH=00h)
  1349.     BL = attribute (text mode) or color (graphics mode)
  1350.          if bit 7 set in graphics mode, character is xor'ed onto screen
  1351.     CX = number of times to write character
  1352. Notes:    all characters are displayed, including CR, LF, and BS
  1353.     replication count in CX may produce an unpredictable result in graphics
  1354.       modes if it is greater than the number of positions remaining in the
  1355.       current row
  1356. SeeAlso: AH=08h,AH=0Ah,AH=4Bh"GRAFIX",INT 17/AH=60h,INT 1F,INT 43,INT 44
  1357. ----------100A-------------------------------
  1358. INT 10 - VIDEO - WRITE CHARACTER ONLY AT CURSOR POSITION
  1359.     AH = 0Ah
  1360.     AL = character to display
  1361.     BH = page number (00h to number of pages - 1) (see AH=00h)
  1362.     BL = attribute (PCjr only) or color (graphics mode)
  1363.          if bit 7 set in graphics mode, character is xor'ed onto screen
  1364.     CX = number of times to write character
  1365. Notes:    all characters are displayed, including CR, LF, and BS
  1366.     replication count in CX may produce an unpredictable result in graphics
  1367.       modes if it is greater than the number of positions remaining in the
  1368.       current row
  1369. SeeAlso: AH=08h,AH=09h,AH=4Bh,INT 17/AH=60h,INT 1F,INT 43,INT 44
  1370. ----------100B--BH00-------------------------
  1371. INT 10 - VIDEO - SET BACKGROUND/BORDER COLOR
  1372.     AH = 0Bh
  1373.     BH = 00h
  1374.     BL = background/border color (border only in text modes)
  1375. SeeAlso: AH=0Bh/BH=01h
  1376. ----------100B--BH01-------------------------
  1377. INT 10 - VIDEO - SET PALETTE
  1378.     AH = 0BH
  1379.     BH = 01h
  1380.     BL = palette ID
  1381.         00h background, green, red, and brown/yellow
  1382.         01h background, cyan, magenta, and white
  1383. SeeAlso: AH=0Bh/BH=00h
  1384. ----------100C-------------------------------
  1385. INT 10 - VIDEO - WRITE GRAPHICS PIXEL
  1386.     AH = 0Ch
  1387.     BH = page number
  1388.     AL = pixel color (if bit 7 set, value is xor'ed onto screen)
  1389.     CX = column
  1390.     DX = row
  1391. Notes:    valid only in graphics modes
  1392.     BH is ignored if the current video mode supports only one page
  1393. SeeAlso: AH=0Dh,AH=46h
  1394. ----------100D-------------------------------
  1395. INT 10 - VIDEO - READ GRAPHICS PIXEL
  1396.     AH = 0Dh
  1397.     BH = page number
  1398.     CX = column
  1399.     DX = row
  1400. Return: AL = pixel color
  1401. Notes:    valid only in graphics modes
  1402.     BH is ignored if the current video mode supports only one page
  1403. SeeAlso: AH=0Ch,AH=47h
  1404. ----------100E-------------------------------
  1405. INT 10 - VIDEO - TELETYPE OUTPUT
  1406.     AH = 0Eh
  1407.     AL = character to write
  1408.     BH = page number
  1409.     BL = foreground color (graphics modes only)
  1410. Desc:    display a character on the screen, advancing the cursor and scrolling
  1411.       the screen as necessary
  1412. Notes:    characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted
  1413.       and do the expected things
  1414.     IBM PC ROMs dated 4/24/81 and 10/19/81 require that BH be the same as
  1415.       the current active page
  1416. SeeAlso: AH=02h,AH=0Ah
  1417. ----------100F-------------------------------
  1418. INT 10 - VIDEO - GET CURRENT VIDEO MODE
  1419.     AH = 0Fh
  1420. Return: AH = number of character columns
  1421.     AL = display mode (see AH=00h)
  1422.     BH = active page (see AH=05h)
  1423. Notes:    if mode was set with bit 7 set ("no blanking"), the returned mode will
  1424.       also have bit 7 set
  1425.     EGA, VGA, and UltraVision return either AL=03h (color) or AL=07h
  1426.       (monochrome) in all extended-row text modes
  1427. SeeAlso: AH=00h,AH=05h,AX=10F2h/BL=00h,AX=1130h,AX=CD04h
  1428. ----------100F56BX4756-----------------------
  1429. INT 10 - VUIMAGE DISPLAY DRIVER (v2.20 and below)
  1430.     AX = 0F56h
  1431.     BX = 4756h
  1432.     CX = 4944h
  1433.     DL = function
  1434.         01h installation check
  1435.         Return: AX = 5649h
  1436.             BX = 4443h
  1437.             CX = 5647h
  1438.             DH = 01h
  1439.         02h get first video mode's parameters
  1440.         Return: AX = BIOS mode number
  1441.             BX = width in pixels
  1442.             CX = height in pixels
  1443.             DX = number of colors
  1444.         03h get next video mode's parameters
  1445.         Return: as for DL=02h
  1446.         04h display line???
  1447.         ES:DI -> record (see below)
  1448.         ???
  1449.         Return: ???
  1450. Notes:    VUIMAGE is a shareware GIF/TIFF image viewer by Offe Enterprises
  1451.     the use of TSR display drivers was discontinued after v2.20
  1452.  
  1453. Format of record for DL=04h:
  1454. Offset    Size    Description
  1455.  00h    WORD    row number
  1456.  02h    WORD    starting column???
  1457.  04h    WORD    ending column???
  1458.     ???
  1459. ----------100F--SIF123-----------------------
  1460. INT 10 - FRIEZE v7.41+ - INSTALLATION CHECK
  1461.     AH = 0Fh
  1462.     SI = F123h
  1463.     DI = 321Fh
  1464. Return: AH = number of character columns
  1465.     AL = display mode (see AH=00h)
  1466.     BH = active page (see AH=05h)
  1467.     SI = DI = F345h if installed
  1468. Notes:    if mode was set with bit 7 set ("no blanking"), the returned mode will
  1469.       also have bit 7 set
  1470.     EGA, VGA, and UltraVision return either AL=03h (color) or AL=07h
  1471.       (monochrome) in all extended-row text modes
  1472. SeeAlso: AH=0Fh"VIDEO",AH=4Bh"FRIEZE"
  1473. ----------1010-------------------------------
  1474. INT 10 - BIOS Window Extension v1.1 - SET WINDOW COORDINATES
  1475.     AH = 10h
  1476.     CH,CL = row,column of upper left corner of window
  1477.     DH,DL = row,column of lower right corner of window
  1478. Return: AL = status
  1479.         00h successful
  1480.         01h failed
  1481.     AH destroyed
  1482. Program: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal
  1483. Note:    when a window has been set, all output via AH=0Eh is restricted to
  1484.       the specified window
  1485. SeeAlso: AH=11h"Window",AH=12h"Window"
  1486. ----------1010-------------------------------
  1487. INT 10 - VIDEO - Eagle PC2 BIOS Rev. C - SET SCROLL SPEED
  1488.     AH = 10h
  1489.     AL = speed
  1490.         00h fast
  1491.         01h slow (only moves characters during vertical retrace)
  1492. Return: AH = previous speed
  1493. ----------101000----------------------------
  1494. INT 10 - VIDEO - SET SINGLE PALETTE REGISTER (PCjr,EGA,MCGA,VGA)
  1495.     AX = 1000h
  1496.     BL = palette register number (00h-0Fh)
  1497.        = attribute register number (undocumented)
  1498.          10h attribute mode control register (should let BIOS control this)
  1499.          11h overscan color register (see also AX=1001h)
  1500.          12h color plane enable register (bits 3-0 enable corresponding
  1501.         text attribute bit)
  1502.          13h horizontal PEL panning register
  1503.          14h color select register
  1504.     BH = color or attribute register value
  1505. Notes:    on MCGA, only BX = 0712h is supported
  1506.     under UltraVision, the palette locking status (see AX=CD01h)
  1507.       determines the outcome
  1508. SeeAlso: AX=1002h,AX=1007h,AX=CD01h
  1509. ----------101001-----------------------------
  1510. INT 10 - VIDEO - SET BORDER (OVERSCAN) COLOR (PCjr,EGA,VGA)
  1511.     AX = 1001h
  1512.     BH = border color (00h-3Fh)
  1513. BUG:    the original IBM VGA BIOS incorrectly updates the parameter save area
  1514.       and places the border color at offset 11h of the palette table
  1515.       rather than offset 10h
  1516. Note:    under UltraVision, the palette locking status (see AX=CD01h)
  1517.       determines the outcome
  1518. SeeAlso: AX=1002h,AX=1008h,AX=CD01h
  1519. ----------101002-----------------------------
  1520. INT 10 - VIDEO - SET ALL PALETTE REGISTERS (PCjr,EGA,VGA)
  1521.     AX = 1002h
  1522.     ES:DX -> palette register list
  1523. Note:    under UltraVision, the palette locking status (see AX=CD01h)
  1524.       determines the outcome
  1525. SeeAlso: AX=1000h,AX=1001h,AX=1009h,AX=CD01h
  1526.  
  1527. Format of palette register list:
  1528. Offset    Size    Description
  1529.  00h 16 BYTEs    colors for palette registers 00h through 0Fh
  1530.  10h    BYTE    border color
  1531. ----------101003-----------------------------
  1532. INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA)
  1533.     AX = 1003h
  1534.     BL = new state
  1535.         00h background intensity enabled
  1536.         01h blink enabled
  1537.     BH = 00h to avoid problems on some adapters
  1538. Notes:    although there is no function to get the current status on adapters
  1539.       prior to the VGA, bit 5 of 0040h:0065h indicates the state; on the
  1540.       VGA, use AH=1Bh and check offset 2Dh of the returned data
  1541.     when configured for a monochrome display, the Boca Research Multi-EGA
  1542.       with ROM v M1.1 Type D has its screen disrupted if BH is not clear
  1543. SeeAlso: AH=08h,AH=1Bh
  1544. ----------101007-----------------------------
  1545. INT 10 - VIDEO - GET INDIVIDUAL PALETTE REGISTER (VGA,UltraVision v2+)
  1546.     AX = 1007h
  1547.     BL = palette or attribute (undoc) register number (see AX=1000h)
  1548. Return: BH = palette or attribute register value
  1549. Note:    UltraVision v2+ supports this function even on color EGA systems in
  1550.       video modes 00h-03h, 10h, and 12h; direct programming of the palette
  1551.       registers will cause incorrect results because the EGA registers are
  1552.       write-only.  To guard against older versions or unsupported video
  1553.       modes, programs which expect to use this function on EGA systems
  1554.       should set BH to FFh on entry.
  1555. SeeAlso: AX=1000h,AX=1009h
  1556. ----------101008-----------------------------
  1557. INT 10 - VIDEO - READ OVERSCAN (BORDER COLOR) REGISTER (VGA,UltraVision v2+)
  1558.     AX = 1008h
  1559. Return: BH = border color (00h-3Fh)
  1560. Note:    UltraVision v2+ supports this function even on color EGA systems in
  1561.       video modes 00h-03h, 10h, and 12h; direct programming of the palette
  1562.       registers will cause incorrect results because the EGA registers are
  1563.       write-only.  To guard against older versions or unsupported video
  1564.       modes, programs which expect to use this function on EGA systems
  1565.       should set BH to FFh on entry.
  1566. SeeAlso: AX=1001h
  1567. ----------101009-----------------------------
  1568. INT 10 - VIDEO - READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER (VGA)
  1569.     AX = 1009h
  1570.     ES:DX -> 17-byte buffer (see AX=1002h)
  1571. Note:    UltraVision v2+ supports this function even on color EGA systems in
  1572.       video modes 00h-03h, 10h, and 12h; direct programming of the palette
  1573.       registers will cause incorrect results because the EGA registers are
  1574.       write-only.  To guard against older versions or unsupported video
  1575.       modes, programs which expect to use this function on EGA systems
  1576.       should set the ES:DX buffer to FFh before calling.
  1577. SeeAlso: AX=1002h,AX=1007h,AX=CD02h
  1578. ----------101010-----------------------------
  1579. INT 10 - VIDEO - SET INDIVIDUAL DAC REGISTER (VGA/MCGA)
  1580.     AX = 1010h
  1581.     BX = register number
  1582.     CH = new value for green (0-63)
  1583.     CL = new value for blue (0-63)
  1584.     DH = new value for red (0-63)
  1585. SeeAlso: AX=1012h,AX=1015h
  1586. ----------101012-----------------------------
  1587. INT 10 - VIDEO - SET BLOCK OF DAC REGISTERS (VGA/MCGA)
  1588.     AX = 1012h
  1589.     BX = starting color register
  1590.     CX = number of registers to set
  1591.     ES:DX -> table of 3*CX bytes where each 3 byte group represents one
  1592.          byte each of red, green and blue (0-63)
  1593. SeeAlso: AX=1010h,AX=1017h
  1594. ----------101013-----------------------------
  1595. INT 10 - VIDEO - SELECT VIDEO DAC COLOR PAGE (VGA)
  1596.     AX = 1013h
  1597.     BL = subfunction
  1598.         00h select paging mode
  1599.         BH = 00h select 4 blocks of 64
  1600.         BH = 01h select 16 blocks of 16
  1601.         01h select page
  1602.         BH = page number (00h to 03h) or (00h to 0Fh)
  1603. Note:    this function is not valid in mode 13h
  1604. SeeAlso: AX=101Ah
  1605. ----------101015-----------------------------
  1606. INT 10 - VIDEO - READ INDIVIDUAL DAC REGISTER (VGA/MCGA)
  1607.     AX = 1015h
  1608.     BL = palette register number
  1609. Return: DH = red value
  1610.     CH = green value
  1611.     CL = blue value
  1612. SeeAlso: AX=1010h,AX=1017h
  1613. ----------101017-----------------------------
  1614. INT 10 - VIDEO - READ BLOCK OF DAC REGISTERS (VGA/MCGA)
  1615.     AX = 1017h
  1616.     BX = starting palette register
  1617.     CX = number of palette registers to read
  1618.     ES:DX -> buffer (3 * CX bytes in size) (see also AX=1012h)
  1619. Return: buffer filled with CX red, green and blue triples
  1620. SeeAlso: AX=1012h,AX=1015h
  1621. ----------101018-----------------------------
  1622. INT 10 U - VIDEO - SET PEL MASK (VGA/MCGA)
  1623.     AX = 1018h
  1624.     BL = new PEL value
  1625. SeeAlso: AX=1019h
  1626. ----------101019-----------------------------
  1627. INT 10 U - VIDEO - READ PEL MASK (VGA/MCGA)
  1628.     AX = 1019h
  1629. Return:    BL = value read
  1630. SeeAlso: AX=1018h
  1631. ----------10101A-----------------------------
  1632. INT 10 - VIDEO - GET VIDEO DAC COLOR-PAGE STATE (VGA)
  1633.     AX = 101Ah
  1634. Return: BL = paging mode
  1635.         00h four pages of 64
  1636.         01h sixteen pages of 16
  1637.     BH = current page
  1638. SeeAlso: AX=1013h
  1639. ----------10101B-----------------------------
  1640. INT 10 - VIDEO - PERFORM GRAY-SCALE SUMMING (VGA/MCGA)
  1641.     AX = 101Bh
  1642.     BX = starting palette register
  1643.     CX = number of registers to convert
  1644. SeeAlso: AH=12h/BL=33h
  1645. ----------1010E0-----------------------------
  1646. INT 10 - VIDEO - Diamond Speedstar 24 - SET 24-BIT GRAPHICS MODE
  1647.     AX = 10E0h
  1648.     BL = video mode (see also AH=00h)
  1649.         2Eh = 640x480
  1650. Return: ???
  1651. SeeAlso: AH=00h,AX=10F0h
  1652. ----------1010F0-----------------------------
  1653. INT 10 - VIDEO - Tseng ET-4000 BIOS - SET HiColor GRAPHICS MODE
  1654.     AX = 10F0h
  1655.     BL = video mode (see also AH=00h)
  1656.         32768-color modes:
  1657.         13h = 320x200
  1658.         2Dh = 640x350
  1659.         2Eh = 640x480
  1660.         2Fh = 640x400
  1661.         30h = 800x600
  1662.         16M-color modes:
  1663.         3Eh = 640x480 (Genoa 7900)
  1664. Return:    AL = 10h if supported
  1665.     AH = status
  1666.         00h if successful
  1667.         other on error
  1668. Note:    the Tseng HiColor BIOS extensions are supported by:
  1669.       Diamond Computer Systems    SpeedStar HiColor VGA
  1670.       Everex Systems        HC VGA
  1671.       Focus Information Systems    2theMax 4000
  1672.       Cardinal Technologies        VGA732
  1673.       Orchid ProDesigner IIs    Genoa 7900
  1674. SeeAlso: AH=00h,AX=10E0h,AX=10F1h,AX=10F2h
  1675. ----------1010F1-----------------------------
  1676. INT 10 - VIDEO - Tseng ET-4000 BIOS - GET DAC TYPE
  1677.     AX = 10F1h
  1678. Return: AL = 10h if supported
  1679.     BL = type of digital/analog converter
  1680.         00h normal VGA DAC
  1681.         01h Sierra SC1148x HiColor DAC
  1682.         02h new Sierra DAC
  1683.        else other HiColor DAC
  1684. SeeAlso: AX=10F0h,AX=10F2h
  1685. ----------1010F2BL00-------------------------
  1686. INT 10 u - VIDEO - Tseng ET-4000 BIOS - CHECK IF IN HiColor MODE
  1687.     AX = 10F2h
  1688.     BL = 00h
  1689. Return: AX = 0010h if supported
  1690.     BL = video mode type
  1691.         00h normal
  1692.         else HiColor mode
  1693. SeeAlso: AH=0Fh,AX=10F0h,AX=10F1h
  1694. ----------1011-------------------------------
  1695. INT 10 - BIOS Window Extension v1.1 - GET WINDOW COORDINATES
  1696.     AH = 11h
  1697. Return: CH,CL = row,column of upper left corner
  1698.     DH,DL = row,column of lower right corner
  1699. Program: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal
  1700. SeeAlso: AH=10h"Window",AH=12h"Window"
  1701. ----------1011-------------------------------
  1702. INT 10 - VIDEO - TEXT-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA)
  1703.     AH = 11h
  1704.     The following functions will cause a mode set, completely resetting
  1705.     the video environment, but without clearing the video buffer
  1706.     AL = 00h, 10h: load user-specified patterns
  1707.         ES:BP -> user table
  1708.         CX      = count of patterns to store
  1709.         DX      = character offset into map 2 block
  1710.         BL      = block to load in map 2
  1711.         BH      = number of bytes per character pattern
  1712.     AL = 01h, 11h: load ROM monochrome patterns (8 by 14)
  1713.         BL      = block to load
  1714.     AL = 02h, 12h: load ROM 8 by 8 double-dot patterns
  1715.         BL      = block to load
  1716.     AL = 03h: set block specifier
  1717.         BL      = block specifier
  1718.            (EGA/MCGA) bits 0,1 = block selected by chars with attribute
  1719.                      bit 3 = 0
  1720.                   bits 2,3 = block selected by chars with attribute
  1721.                      bit 3 = 1
  1722.            (VGA) bits 0,1,4 = block selected by attribute bit 3 = 0
  1723.              bits 2,3,5 = block selected by attribute bit 3 = 1
  1724.     AL = 04h, 14h: load ROM 8x16 character set (VGA)
  1725.         BL    = block to load
  1726. Notes:    The routines called with AL=1xh are designed to be called only
  1727.       immediately after a mode set and are similar to the routines called
  1728.       with AL=0xh, except that:
  1729.           Page 0 must be active.
  1730.           Bytes/character is recalculated.
  1731.           Max character rows is recalculated.
  1732.           CRT buffer length is recalculated.
  1733.           CRTC registers are reprogrammed as follows:
  1734.              R09 = bytes/char-1 ; max scan line (mode 7 only)
  1735.              R0A = bytes/char-2 ; cursor start
  1736.              R0B = 0        ; cursor end
  1737.              R12 = ((rows+1)*(bytes/char))-1 ; vertical display end
  1738.              R14 = bytes/char    ; underline loc
  1739.                (*** BUG: should be 1 less ***)
  1740.     the current block specifiers may be determined with INT 10/AH=1Bh,
  1741.       looking at offsets 2Bh and 2Ch of the returned data (VGA only)
  1742. SeeAlso: AH=1Bh,AX=CD10h
  1743. ----------1011-------------------------------
  1744. INT 10 - VIDEO - GRAPHICS-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA)
  1745.     AH = 11h
  1746.     AL = 20h: set user 8 by 8 graphics characters (INT 1F)
  1747.         ES:BP -> user table
  1748.     AL = 21h: set user graphics characters
  1749.         ES:BP -> user table
  1750.         CX      = bytes per character
  1751.         BL      = row specifier
  1752.            00h user set
  1753.               DL = number of rows
  1754.            01h 14 rows
  1755.            02h 25 rows
  1756.            03h 43 rows
  1757.     AL = 22h: ROM 8 by 14 set
  1758.         BL = row specifier (see above)
  1759.     AL = 23h: ROM 8 by 8 double dot
  1760.         BL = row specifier (see above)
  1761.     AL = 24h: load 8x16 graphics characters (VGA/MCGA)
  1762.         BL = row specifier (see above)
  1763.     AL = 29h: load 8x16 graphics characters (Compaq Systempro)
  1764.         BL = row specifier (see above)
  1765. Notes:    these functions are meant to be called only after a mode set
  1766.     UltraVision v2+ sets INT 43 to the appropriate font for AL=22h,23h,24h,
  1767.       and 29h
  1768. SeeAlso: INT 1F, INT 43
  1769. ----------101130-----------------------------
  1770. INT 10 - VIDEO - GET FONT INFORMATION (EGA, MCGA, VGA)
  1771.     AX = 1130h
  1772.     BH = pointer specifier
  1773.         00h INT 1Fh pointer
  1774.         01h INT 43h pointer
  1775.         02h ROM 8x14 character font pointer
  1776.         03h ROM 8x8 double dot font pointer
  1777.         04h ROM 8x8 double dot font (high 128 characters)
  1778.         05h ROM alpha alternate (9 by 14) pointer (EGA,VGA)
  1779.         06h ROM 8x16 font (MCGA, VGA)
  1780.         07h ROM alternate 9x16 font (VGA only)
  1781.         11h (UltraVision v2+) 8x20 font (VGA) or 8x19 font (autosync EGA)
  1782.         12h (UltraVision v2+) 8x10 font (VGA) or 8x11 font (autosync EGA)
  1783. Return: ES:BP = specified pointer
  1784.     CX    = bytes/character of on-screen font (not the requested font!)
  1785.     DL    = character rows on screen - 1 (VGA)
  1786.           = character rows on screen (EGA)
  1787. Note:    for UltraVision v2+, the 9xN alternate fonts follow the corresponding
  1788.       8xN font at ES:BP+256N
  1789. SeeAlso: AX=1100h,AX=1120h,INT 1F,INT 43
  1790. ----------1012-------------------------------
  1791. INT 10 - BIOS Window Extension v1.1 - GET BLANKING ATTRIBUTE
  1792.     AH = 12h
  1793. Return: BH = attribute to use on blanked lines when scrolling
  1794. Program: BWE is a TSR by John J. Seal published in May 1986 Dr. Dobb's Journal
  1795. SeeAlso: AH=11h"Window",AH=12h"Window"
  1796. ----------1012--BL10-------------------------
  1797. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, EGA, VGA, MCGA) - GET EGA INFO
  1798.     AH = 12h
  1799.     BL = 10h
  1800. Return: BH = 00h color mode in effect (I/O port 3Dxh)
  1801.          01h mono mode in effect (I/O port 3Bxh)
  1802.     BL = 00h  64k bytes memory installed
  1803.          01h 128k bytes memory installed
  1804.          02h 192k bytes memory installed
  1805.          03h 256k bytes memory installed
  1806.     CH = feature bits
  1807.     CL = switch settings
  1808. Note:    one possible check for the presence of an EGA or later display card
  1809.       is to call this function with BH=FFh; if not present, BH will be
  1810.       unchanged on return
  1811. ----------1012--BL20-------------------------
  1812. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS,EGA,VGA,MCGA) - ALTERNATE PRTSC
  1813.     AH = 12h
  1814.     BL = 20h  select alternate print screen routine
  1815. Notes:    installs a PrtSc routine from the video card's BIOS to replace the
  1816.       default PrtSc handler from the ROM BIOS, which usually does not
  1817.       understand screen heights other than 25 lines
  1818.     some adapters disable print-screen instead of enhancing it
  1819. SeeAlso: INT 05
  1820. ----------1012--BL2E-------------------------
  1821. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1822.     AH = 12h
  1823.     BL = 2Eh
  1824. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1825.       crash the system on this function
  1826. ----------1012--BL30-------------------------
  1827. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - SELECT VERTICAL RESOLUTION
  1828.     AH = 12h
  1829.     BL = 30h
  1830.     AL = vertical resolution
  1831.          00h 200 scan lines
  1832.          01h 350 scan lines
  1833.          02h 400 scan lines
  1834. Return: AL = 12h if function supported
  1835. ----------1012--BL31-------------------------
  1836. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - PALETTE LOADING
  1837.     AH = 12h
  1838.     BL = 31h
  1839.     AL = 00h enable default palette loading
  1840.          01h disable default palette loading
  1841. Return: AL = 12h if function supported
  1842. ----------1012--BL32-------------------------
  1843. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - VIDEO ADDRESSING
  1844.     AH = 12h
  1845.     BL = 32h
  1846.     AL = 00h enable video addressing
  1847.          01h disable video addressing
  1848. Return: AL = 12h if function supported
  1849. ----------1012--BL33-------------------------
  1850. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA, MCGA) - GRAY-SCALE SUMMING
  1851.     AH = 12h
  1852.     BL = 33h
  1853.     AL = 00h enable gray scale summing
  1854.          01h disable gray scale summing
  1855. Return: AL = 12h if function supported
  1856. SeeAlso: AX=101Bh,AX=BF06h
  1857. ----------1012--BL34-------------------------
  1858. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (VGA) - CURSOR EMULATION
  1859.     AH = 12h
  1860.     BL = 34h
  1861.     AL = 00h enable alphanumeric cursor emulation
  1862.          01h disable alphanumeric cursor emulation
  1863. Return: AL = 12h if function supported
  1864. ----------1012--BL35-------------------------
  1865. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS) - DISPLAY-SWITCH INTERFACE
  1866.     AH = 12h
  1867.     BL = 35h
  1868.     AL = 00h initial adapter video off
  1869.          01h initial planar video on
  1870.          02h switch active video off
  1871.          03h switch inactive video on
  1872.          80h *UNDOCUMENTED* set system board video active flag
  1873.     ES:DX -> buffer (128 byte save area if AL = 0, 2 or 3)
  1874. Return: AL = 12h if function supported
  1875. ----------1012--BL36-------------------------
  1876. INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, VGA) - VIDEO REFRESH CONTROL
  1877.     AH = 12h
  1878.     BL = 36h
  1879.     AL = 00h enable refresh
  1880.          01h disable refresh
  1881. Return: AL = 12h if function supported
  1882. ----------1012--BH55-------------------------
  1883. INT 10 - VIDEO - ALTERNATE FUNC SELECT (ATI,Tatung,Taxan) - ENHANCED FEATURES
  1884.     AH = 12h
  1885.     BH = 55h
  1886.     BL = subfunction
  1887.         00h disabled enhanced features
  1888.         01h enable enhanced features
  1889.         02h get status
  1890.         Return: AL = status flags
  1891.                 bit 3: set if enhanced features enabled
  1892.                 bits 7-5 monitor type
  1893.                 000 PS/2 mono
  1894.                 001 PS/2 color
  1895.                 010 multi-sync
  1896.                 011 Taxan 650 25kHz
  1897.                 100 RGB
  1898.                 101 mono
  1899.                 110 EGA
  1900.                 111 Compaq internal
  1901.         03h disable register trapping (CGA emulation)
  1902.         04h enable register trapping
  1903.         05h program mode described by table at ES:BP
  1904.         06h get mode table
  1905.         AL = video mode
  1906.         Return: ES:BP -> table suitable for mode AL (and subfnc BL=05h)
  1907.             BP = FFFFh on error
  1908.  
  1909. Format of ATI VGA Wonder video mode table:
  1910. Offset    Size    Description
  1911.  00h    BYTE    number of columns
  1912.  01h    BYTE    maximum row (number of rows - 1)
  1913.  02h    BYTE    scan lines per row
  1914.  03h    WORD    video buffer size in bytes
  1915.  05h  4 BYTEs    values for Sequencer registers 1-4
  1916.  09h    BYTE    value for Miscellaneous Output register
  1917.  0Ah 25 BYTEs    values for CRTC registers 00h-18h
  1918.         00h horizontal total size (chars)
  1919.         01h horizontal displayed (chars)
  1920.         02h horizontal sync position (chars)
  1921.         03h horizontal sync width (chars)
  1922.         04h vertical total size (char rows)
  1923.         05h vertical total adjust (scan lines)
  1924.         06h vertical displayed (char rows)
  1925.         07h vertical sync position (char rows)
  1926.         08h interlace mode
  1927.         09h max scan line in row
  1928.         0Ah cursor start scan line
  1929.         0Bh cursor end scan line
  1930.         0Ch screen memory start (high)
  1931.         0Dh screen memory start (low)
  1932.         0Eh cursor address (high)
  1933.         0Fh cursor address (low)
  1934.         10h light pen (high)
  1935.         11h light pen (low)
  1936.  23h 20 BYTEs    default palette (values for Attribute Controller regs 00h-13h)
  1937.  37h  9 BYTEs    values for Graphics Controller registers 00h-08h
  1938. ----------1012--BL74-------------------------
  1939. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1940.     AH = 12h
  1941.     BL = 74h
  1942. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1943.       crash the system on this function
  1944. ----------1012--BL80-------------------------
  1945. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1946.     AH = 12h
  1947.     BL = 80h
  1948. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1949.       crash the system on this function
  1950. ----------1012--BLBE-------------------------
  1951. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1952.     AH = 12h
  1953.     BL = BEh
  1954. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1955.       crash the system on this function
  1956. ----------1012--BLC6-------------------------
  1957. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1958.     AH = 12h
  1959.     BL = C6h
  1960. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1961.       crash the system on this function
  1962. ----------1012--BLF0-------------------------
  1963. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  1964.     AH = 12h
  1965.     BL = F0h
  1966. Note:    due to an omitted end-of-list marker, this version of the BIOS will
  1967.       crash the system on this function
  1968. ----------1013-------------------------------
  1969. INT 10 - VIDEO - WRITE STRING (AT and later,EGA)
  1970.     AH = 13h
  1971.     AL = write mode
  1972.        bit 0: update cursor after writing
  1973.            1: string contains alternating characters and attributes
  1974.     BH = page number
  1975.     BL = attribute if string contains only characters
  1976.     CX = number of characters in string
  1977.     DH,DL = row,column at which to start writing
  1978.     ES:BP -> string to write
  1979. Notes:    recognizes CR, LF, BS, and bell
  1980.     also available PC or XT with EGA or higher
  1981.     HP 95LX only supports write mode 00h
  1982. BUG:    on the IBM VGA Adapter, any scrolling which may occur is performed on
  1983.       the active page rather than the requested page
  1984. SeeAlso: AH=09h,AH=0Ah
  1985. ----------101400-----------------------------
  1986. INT 10 - VIDEO - LOAD USER-SPECIFIED LCD CHARACTER FONT (CONV,Compaq Port 386)
  1987.     AX = 1400h
  1988.     ES:DI -> character font
  1989.     BH = number of bytes per character
  1990.         08h or 10h (Compaq)
  1991.     BL = 00h load main font (block 0)
  1992.          01h load alternate font (block 1)
  1993.     CX = number of characters to store
  1994.     DX = character offset into RAM font area
  1995. SeeAlso: AH=11h,AX=1401h
  1996. ----------101401-----------------------------
  1997. INT 10 - VIDEO - LOAD SYSTEM ROM DEFAULT LCD CHARACTER FONT (CONV,CP386)
  1998.     AX = 1401h
  1999.     BL = font to load
  2000.         00h main font (block 0)
  2001.         01h alternate font (block 1)
  2002. SeeAlso: AH=11h,AX=1400h
  2003. ----------101402-----------------------------
  2004. INT 10 - VIDEO - SET MAPPING OF LCD HIGH INTENSITY ATTRIBUTES (CONV,CP386)
  2005.     AX = 1402h
  2006.     BL = function
  2007.         00h ignore high intensity attribute
  2008.         01h map high intensity to underscore
  2009.         02h map high intensity to reverse video
  2010.         03h map high intensity to selected alternate font
  2011.         B0h half intensity (Compaq)
  2012.         B1h toggle active intensity bit interpretation (CP386)
  2013. ----------1015-------------------------------
  2014. INT 10 - VIDEO - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE)
  2015.     AH = 15h
  2016. Return: AX = alternate display adapter type
  2017.         0000h none
  2018.         5140h LCD
  2019.         5153h CGA
  2020.         5151h mono
  2021.     ES:DI -> parameter table (see below)
  2022. SeeAlso: AH=1Bh
  2023.  
  2024. Format of display parameter table:
  2025. Offset    Size    Description
  2026.  00h    WORD    monitor model number
  2027.  02h    WORD    vertical pixels per meter
  2028.  04h    WORD    horizontal pixels per meter
  2029.  06h    WORD    total vertical pixels
  2030.  08h    WORD    total horizontal pixels
  2031.  0Ah    WORD    horizontal pixel separation in micrometers
  2032.  0Ch    WORD    vertical pixel separation in micrometers
  2033. ----------1015-------------------------------
  2034. INT 10 - VIDEO - SET SUPERIMPOSE MODE (Sperry PC)
  2035.     AH = 15h
  2036.     AL = superimpose mode
  2037.         00h show graphics screen
  2038.         01h show text screen
  2039.         02h show text screen superimposed on graphics screen
  2040. ----------101A-------------------------------
  2041. INT 10 - VIDEO - DISPLAY COMBINATION (PS,VGA/MCGA)
  2042.     AH = 1Ah
  2043.     AL = 00h read display combination code
  2044.         Return: BL = active display code (see below)
  2045.             BH = alternate display code
  2046.          01h set display combination code
  2047.         BL = active display code (see below)
  2048.         BH = alternate display code
  2049. Return: AL = 1Ah if function was supported
  2050.  
  2051. Values for display combination code:
  2052.     00h no display
  2053.     01h monochrome adapter w/ monochrome display
  2054.     02h CGA w/ color display
  2055.     03h reserved
  2056.     04h EGA w/ color display
  2057.     05h EGA w/ monochrome display
  2058.     06h PGA w/ color display
  2059.     07h VGA w/ monochrome analog display
  2060.     08h VGA w/ color analog display
  2061.     09h reserved
  2062.     0Ah MCGA w/ digital color display
  2063.     0Bh MCGA w/ monochrome analog display
  2064.     0Ch MCGA w/ color analog display
  2065.     FFh unknown display type
  2066. ----------101B-------------------------------
  2067. INT 10 - VIDEO - FUNCTIONALITY/STATE INFORMATION (PS,VGA/MCGA)
  2068.     AH = 1Bh
  2069.     BX = implementation type
  2070.         0000h return funtionality/state information
  2071.     ES:DI -> 64 byte buffer for state information (see below)
  2072. Return: AL = 1Bh if function supported
  2073.         ES:DI buffer filled with state information
  2074. SeeAlso: AH=15h
  2075.  
  2076. Format of state information:
  2077. Offset    Size    Description
  2078.  00h    DWORD    address of static funtionality table (see below)
  2079.  04h    BYTE    video mode in effect
  2080.  05h    WORD    number of columns
  2081.  07h    WORD    length of regen buffer in bytes
  2082.  09h    WORD    starting address of regen buffer
  2083.  0Bh    WORD    cursor position for page 0
  2084.  0Dh    WORD    cursor position for page 1
  2085.  0Fh    WORD    cursor position for page 2
  2086.  11h    WORD    cursor position for page 3
  2087.  13h    WORD    cursor position for page 4
  2088.  15h    WORD    cursor position for page 5
  2089.  17h    WORD    cursor position for page 6
  2090.  19h    WORD    cursor position for page 7
  2091.  1Bh    WORD    cursor type
  2092.  1Dh    BYTE    active display page
  2093.  1Eh    WORD    CRTC port address
  2094.  20h    BYTE    current setting of register (3?8)
  2095.  21h    BYTE    current setting of register (3?9)
  2096.  22h    BYTE    number of rows
  2097.  23h    WORD    bytes/character
  2098.  25h    BYTE    display combination code of active display
  2099.  26h    BYTE    DCC of alternate display
  2100.  27h    WORD    number of colors supported in current mode
  2101.  29h    BYTE    number of pages supported in current mode
  2102.  2Ah    BYTE    number of scan lines active
  2103.         (0,1,2,3) = (200,350,400,480)
  2104.  2Bh    BYTE    primary character block
  2105.  2Ch    BYTE    secondary character block
  2106.  2Dh    BYTE    miscellaneous flags
  2107.         bit 0 all modes on all displays on
  2108.             1 gray summing on
  2109.             2 monochrome display attached
  2110.             3 default palette loading disabled
  2111.             4 cursor emulation enabled
  2112.             5 0 = intensity; 1 = blinking
  2113.             6 PS/2 P70 plasma display (without 9-dot wide font) active
  2114.             7 reserved
  2115.  2Eh  3 BYTEs    reserved (00h)
  2116.  31h    BYTE    video memory available
  2117.         00h = 64K, 01h = 128K, 02h = 192K, 03h = 256K
  2118.  32h    BYTE    save pointer state flags
  2119.         bit 0 512 character set active
  2120.             1 dynamic save area present
  2121.             2 alpha font override active
  2122.             3 graphics font override active
  2123.             4 palette override active
  2124.             5 DCC override active
  2125.             6 reserved
  2126.             7 reserved
  2127.  33h 13 BYTEs    reserved (00h)
  2128.  
  2129. Format of Static Functionality Table:
  2130. Offset    Size    Description
  2131.  00h    BYTE    modes supported #1
  2132.         bit 0 to bit 7 = 1 modes 0,1,2,3,4,5,6 supported
  2133.  01h    BYTE    modes supported #2
  2134.         bit 0 to bit 7 = 1 modes 8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh supported
  2135.  02h    BYTE    modes supported #3
  2136.         bit 0 to bit 3 = 1 modes 10h,11h,12h,13h supported
  2137.         bit 4 to bit 7 reserved
  2138.  03h  4 BYTEs    reserved
  2139.  07h    BYTE    scan lines supported
  2140.         bit 0 to bit 2 = 1 if scan lines 200,350,400 supported
  2141.  08h    BYTE    total number of character blocks available in text modes
  2142.  09h    BYTE    maximum number of active character blocks in text modes
  2143.  0Ah    BYTE    miscellaneous function flags #1
  2144.         bit 0 all modes on all displays function supported
  2145.             1 gray summing function supported
  2146.             2 character font loading function supported
  2147.             3 default palette loading enable/disable supported
  2148.             4 cursor emulation function supported
  2149.             5 EGA palette present
  2150.             6 color palette present
  2151.             7 color paging function supported
  2152.  0Bh    BYTE    miscellaneous function flags #2
  2153.         bit 0 light pen supported
  2154.             1 save/restore state function 1Ch supported
  2155.             2 intensity blinking function supported
  2156.             3 Display Combination Code supported
  2157.           4-7 reserved
  2158.  0Ch    WORD    reserved
  2159.  0Eh    BYTE    save pointer function flags
  2160.         bit 0 512 character set supported
  2161.             1 dynamic save area supported
  2162.             2 alpha font override supported
  2163.             3 graphics font override supported
  2164.             4 palette override supported
  2165.             5 DCC extension supported
  2166.             6 reserved
  2167.             7 reserved
  2168.  0Fh    BYTE    reserved
  2169. ----------101C-------------------------------
  2170. INT 10 - VIDEO - SAVE/RESTORE VIDEO STATE (PS50+,VGA)
  2171.     AH = 1Ch
  2172.     AL = 00h return state buffer size
  2173.         Return: BX = number of 64-byte blocks needed
  2174.          01h save video state
  2175.         ES:BX -> buffer
  2176.          02h restore video state
  2177.         ES:BX -> buffer containing previously saved state
  2178.     CX = requested states
  2179.          bit 0 video hardware
  2180.          1 BIOS data areas
  2181.          2 color registers and DAC state
  2182.           3-15 reserved
  2183. Return: AL = 1Ch if function supported
  2184. Notes:    many BIOSes corrupt the video registers when saving the state, so a
  2185.       program should restore the state immediately after saving it (the
  2186.       saved data is uncorrupted)
  2187.     the BIOS data area consists of the 96 bytes from 0040h:0049h-00A8h
  2188.  
  2189. Format of video hardware state:
  2190. Offset    Size    Description
  2191.  00h    BYTE    sequencer index register
  2192.  01h    BYTE    CRTC index register
  2193.  02h    BYTE    graphics controller index register
  2194.  03h    BYTE    attribute controller index register
  2195.  04h    BYTE    feature controller register
  2196.  05h  4 BYTEs    sequencer registers
  2197.  09h    BYTE    sequencer register 0
  2198.  0Ah 25 BYTEs    CRTC registers 0-8
  2199.  23h 16 BYTEs    palette registers 00h-0Fh
  2200.  33h  4 BYTEs    attribute registers 10h-13h
  2201.  37h  9 BYTEs    graphics controller registers 0-8
  2202.  40h    BYTE    CRTC base address (low)
  2203.  41h    BYTE    CRTC base address (high)
  2204.  42h    BYTE    plane 0 latch
  2205.  43h    BYTE    plane 1 latch
  2206.  44h    BYTE    plane 2 latch
  2207.  45h    BYTE    plane 3 latch
  2208.  
  2209. Format of DAC state:
  2210. Offset    Size    Description
  2211.  00h    BYTE    read/write mode DAC
  2212.  01h    BYTE    pixel address
  2213.  02h    BYTE    pixel mask
  2214.  03h 768 BYTEs    color data (256 triples)
  2215. 303h    BYTE    color select register
  2216. ----------101D-------------------------------
  2217. INT 10 - Tseng ET-4000 BIOS v3.00 - BUG
  2218.     AH = 1Dh
  2219. Note:    this version of the BIOS jumps to a random location on this function
  2220.       due to a fencepost error
  2221. ---------------------------------------------
  2222. INT 10 - VIDEO - XGA - GET DMQS (Display Mode Query and Set) DATA LENGTH
  2223.     AX = 1F00h
  2224. Return: AL = 1Fh if supported
  2225.         BX = number of bytes of DMQS data
  2226. Note:    not supported on the original IBM XGA, only on XGA-NI (non-interlaced)
  2227.       and later models.
  2228. SeeAlso: AX=1F01h
  2229. ---------------------------------------------
  2230. INT 10 - VIDEO - XGA - READ DMQS DATA
  2231.     AX = 1F01h
  2232.     ES:DI -> user buffer for return data (call AH=1F00 for size)
  2233. Return: AL = 1Fh if function supported
  2234.     user buffer filled with DMQS data, see below.
  2235. Note:    not supported on the original IBM XGA, only on XGA-NI (non-interlaced)
  2236.       and later models.
  2237. SeeAlso: AX=1F00h
  2238.  
  2239. Format of DMQS buffer:
  2240. Offset    Size    Description
  2241.  00h    WORD    offset (in bytes) to DMQS data for next XGA instance
  2242.  02h    BYTE    slot number
  2243.  03h    BYTE    XGA implementation function level identifier
  2244.  04h    BYTE    XGA implementation resolution level identifier
  2245.  05h    WORD    vendor identifier - identifies card vendor
  2246.  07h    WORD    vendor defined field
  2247.  09h    WORD    XGA adapter I/O register base address
  2248.  0Bh    WORD    XGA coprocessor register base address
  2249.         (Paragraph---multiply by 10h to get physical address)
  2250.  0Dh    WORD    1 Megabyte system video memory aperture
  2251.         0000h if not allocated
  2252.         (Multiply by 100000h to get physical address)
  2253.  0Fh    WORD    4 Megabyte system video memory aperture
  2254.         0000h if not allocated
  2255.         (Multiply by 100000h to get physical address)
  2256.  11h    WORD    video memory base address
  2257.         (Multiply by 100000h to get physical address)
  2258.  13h    WORD    composite ID of the attached display
  2259.  15h    BYTE    amount of video memory available, in multiples of 256K 
  2260. bytes
  2261.  16h    DWORD    alternate XGA coprocessor register base address.  0 = 
  2262. none.
  2263.  1Ah    var    DMQS Data for further XGA Instances (as above)
  2264. Note:    "Instances" refers to the capability of having up to 8 XGA 
  2265.       adapters in one computer.
  2266. ----------103000CX0000-----------------------
  2267. INT 10 - VIDEO - LOCATE 3270PC CONFIGURATION TABLE (INSTALLATION CHECK)
  2268.     AX = 3000h
  2269.     CX = 0000h
  2270.     DX = 0000h
  2271. Return: CX:DX -> 3270PC configuration table (see below)
  2272.     CX:DX = 0000h:0000h if 3270PC Control Program not active
  2273.  
  2274. Format of 3270 PC configuration table:
  2275. Offset    Size    Description
  2276.  00h    BYTE    aspect ratio X
  2277.  01h    BYTE    aspect ratio Y
  2278.  02h    BYTE    monitor type
  2279.         00h = 5151 (mono) or 5272 (color)
  2280.         01h = 3295
  2281.         02h = 5151 or 5272 with XGA (???) graphics adapter
  2282.         03h = 5279 with 3270PC G adapter
  2283.         04h = 5379 model C01 with 3270PC GX adapter
  2284.         05h = 5379 model M01 with 3270PC GX adapter
  2285.         07h = non-3270PC with 3270 Workstation Program
  2286.         FFh = 3270PC Control Program not loaded
  2287.  03h    BYTE    reserved
  2288.  04h    BYTE    adapter ID
  2289.         00h = 5151/5272 adapter
  2290.         04h = 5151/5272 with XGA adapter
  2291.         30h = 3295 or 3270PC G/GX adapter
  2292.  05h    BYTE    reserved
  2293.  06h    BYTE    function flags 1
  2294.         bit 7: mono text, 1 page
  2295.             6: color text, 1 page
  2296.             5: color text, 4 pages
  2297.             4: CGA color graphics
  2298.             3: 720x350 two-color graphics
  2299.             2: 360x350 four-color graphics
  2300.             1: 720x350 eight-color graphics
  2301.  07h    BYTE    function flags 2
  2302.         bit 6: GPI graphics supported
  2303.  08h    WORD    segment address of Control Program Level table (see below)
  2304.  0Ah 10 BYTEs    reserved
  2305.  
  2306. Format of Control Program Level table:
  2307. Offset    Size    Description
  2308.  00h    WORD    program version
  2309.         02xxh = 3270PC Control Program v2.xx
  2310.         03xxh = 3270PC Control Program v3.xx
  2311.         04xxh = 3270 Workstation Program v1.xx
  2312.  02h    BYTE    Control Program ID (00h)
  2313.  03h 27 BYTEs    Control Program Descriptor ("IBM 3270 PC CONTROL PROGRAM")
  2314. ----------1038-------------------------------
  2315. INT 10 - Tinytalk Personal v1.09f - GET CONFIGURATION INFO
  2316.     AH = 38h
  2317. Return: ES:DI -> configuration info (see below)
  2318. Notes:    Tinytalk is a shareware screen reader by OMS Development/Eric Bohlman
  2319.     this call is also used as the installation check by verifying that the
  2320.       returned ES:DI points at valid configuration info
  2321. SeeAlso: INT 14/AX=F0F1h,INT 2F/FB00h"AutoBraille"
  2322.  
  2323. Format of configuration info:
  2324. Offset    Size    Description
  2325.  00h  8 BYTEs    signature "TTCONFIG"
  2326.  08h    WORD    size of configuration data, not counting signature, this WORD,
  2327.         or the following byte
  2328.  0Ah    BYTE    ???
  2329.  0Bh    ???    configuration data
  2330. ----------1040-------------------------------
  2331. INT 10 - VIDEO - SET GRAPHICS MODE (Hercules GRAFIX)
  2332.     AH = 40h
  2333. SeeAlso: AH=00h,AH=41h
  2334. ----------1041-------------------------------
  2335. INT 10 - VIDEO - SET TEXT MODE (Hercules GRAFIX)
  2336.     AH = 41h
  2337. SeeAlso: AH=00h,AH=40h
  2338. ----------1042-------------------------------
  2339. INT 10 - VIDEO - CLEAR CURRENT PAGE (Hercules GRAFIX)
  2340.     AH = 42h
  2341. SeeAlso: AH=45h
  2342. ----------1043-------------------------------
  2343. INT 10 - VIDEO - SELECT DRAWING PAGE (Hercules GRAFIX)
  2344.     AH = 43h
  2345.     AL = page number (0,1)
  2346. SeeAlso: AH=05h,AH=44h,AH=45h
  2347. ----------1044-------------------------------
  2348. INT 10 - VIDEO - SELECT DRAWING FUNCTION (Hercules GRAFIX)
  2349.     AH = 44h
  2350.     AL = drawing function
  2351.         00h clear pixels
  2352.         01h set pixels
  2353.         02h invert pixels
  2354. SeeAlso: AH=45h,AH=46h,AH=4Ch,AH=4Dh
  2355. ----------1045-------------------------------
  2356. INT 10 - VIDEO - SELECT PAGE TO DISPLAY (Hercules GRAFIX)
  2357.     AH = 45h
  2358.     AL = page number (0,1)
  2359. SeeAlso: AH=05h,AH=42h,AH=43h
  2360. ----------1046-------------------------------
  2361. INT 10 - VIDEO - DRAW ONE PIXEL (Hercules GRAFIX)
  2362.     AH = 46h
  2363.     DI = x (0-720)
  2364.     BP = y (0-347)
  2365. Note:    function 44h determines operation and function 43h which page to use
  2366. SeeAlso: AH=0Ch,AH=47h,AH=49h,AH=4Ch,AH=4Dh
  2367. ----------1047-------------------------------
  2368. INT 10 - VIDEO - FIND PIXEL VALUE (Hercules GRAFIX)
  2369.     AH = 47h
  2370.     DI = x (0-720)
  2371.     BP = y (0-347)
  2372. Return: AL = 00h pixel clear
  2373.     AL = 01h pixel set
  2374. Note:    function 43h specifies which page is used
  2375. SeeAlso: AH=0Dh,AH=46h
  2376. ----------1048-------------------------------
  2377. INT 10 - VIDEO - MOVE TO POINT (Hercules GRAFIX)
  2378.     AH = 48h
  2379.     DI = x (0-720)
  2380.     BP = y (0-347)
  2381. SeeAlso: AH=49h
  2382. ----------1049-------------------------------
  2383. INT 10 - VIDEO - DRAW TO POINT (Hercules GRAFIX)
  2384.     AH = 49h
  2385.     DI = x (0-720)
  2386.     BP = y (0-347)
  2387. Note:    function 48h or 49h specify first point, 44h operation and 43h page to
  2388.       use
  2389. SeeAlso: AH=43h,AH=44h,AH=48h,AH=4Ch,AH=4Dh
  2390. ----------104A-------------------------------
  2391. INT 10 - VIDEO - BLOCK FILL (Hercules GRAFIX)
  2392.     AH = 4Ah
  2393.     DI = x coordinate of lower left corner
  2394.     BP = y coordinate of lower left corner
  2395.     BX = height in pixels
  2396.     CX = width in pixels
  2397. Note:    draws a solid rectangle
  2398. SeeAlso: AH=4Eh
  2399. ----------104B-------------------------------
  2400. INT 10 - VIDEO - DISPLAY CHARACTER (Hercules GRAFIX)
  2401.     AH = 4Bh
  2402.     AL = character to display
  2403.     DI = x (0-720)
  2404.     BP = y (0-347)
  2405. Note:    unlike the other BIOS character functions character position is
  2406.       specified in pixels rather than rows and columns
  2407. SeeAlso: AH=09h,AH=0Ah
  2408. ----------104B-------------------------------
  2409. INT 10 - FRIEZE v7.0+ - API
  2410.     AH = 4Bh
  2411.     CL = function
  2412.         00h reserved
  2413.         01h load window
  2414.         ES:BX -> ASCIZ filename from which to read
  2415.         02h save window
  2416.         ES:BX -> ASCIZ filename to which to write
  2417.         03h (v7.41) set ???
  2418.         AL = ???
  2419.         04h (v7.41) set ???
  2420.         AL = ???
  2421.         06h (v7.41) ???
  2422.         AL = ???
  2423.         07h set window size
  2424.         ES:BX -> four-WORD structure with Xmin, Ymin, Xmax, Ymax
  2425.         09h set patterns
  2426.         ES:BX -> 16-BYTE vector of screen->printer color correspondnces
  2427.         0Ah get patterns
  2428.         ES:BX -> 16-BYTE buffer for color correspondences
  2429.         0Bh set mode
  2430.         AL = mode
  2431.         0Ch (v7.41) ???
  2432.         AL = ???
  2433.             00h ??? (calls original INT 05)
  2434.             else ???
  2435.         0Dh (v7.41) ???
  2436.         AL = ???
  2437.             00h ??? (calls original INT 05)
  2438.             else ???
  2439.         0Eh (v7.41) ???
  2440.         ???
  2441.         0Fh get window
  2442.         ES:BX -> four-WORD buffer for Xmin, Ymin, Xmax, Ymax
  2443.         10h set print options
  2444.         ES:BX -> printer options in same format as FRIEZE cmdline
  2445.         11h (v7.41) ???
  2446.         ???
  2447.         12h (v7.41) ???
  2448.         ???
  2449.         13h (v7.41) ???
  2450.         ???
  2451.         14h get version
  2452.         Return: AH = major version (00h if FRIEZE version before 7)
  2453.             AL = minor version
  2454.         15h set parameters
  2455.         ES:BX -> parameter table (see below)
  2456.         16h get parameters
  2457.         ES:BX -> buffer for parameter table (see below)
  2458.         17h get printer resolution
  2459.         ES:BX -> 12-WORD table for six horizontal/vertical resol pairs
  2460.         18h reserved (v8.0 only)
  2461.         50h (v7.41) get ???
  2462.         Return: AX = ???
  2463.         51h (v7.41) get ???
  2464.         Return: ES = ??? (seen 2348h)
  2465.             AX = ??? (seen 8432h)
  2466. Return: AX = status
  2467.         00h successful
  2468.         01h user aborted printout with ESC
  2469.         02h reserved
  2470.         03h file read error
  2471.         04h file write error
  2472.         05h file not found
  2473.         06h invalid header (not an image or wrong screen mode)
  2474.         07h file close error
  2475.         08h disk error
  2476.         09h printer error
  2477.         0Ah invalid function
  2478.         0Bh can't create file
  2479.         0Ch wrong video mode
  2480. SeeAlso: AH=0Fh/SI=F123h
  2481.  
  2482. Format of parameter table:
  2483. Offset    Size    Description
  2484.  00h    WORD    top margin (1/100 inch)
  2485.  02h    WORD    left margin (1/100 inch)
  2486.  04h    WORD    horizontal size (1/100 inch)
  2487.  06h    WORD    vertical size (1/100 inch)
  2488.  08h    WORD    quality/draft mode
  2489.         00h draft mode
  2490.         01h quality mode
  2491.         02h use horizontal/vertical resolution for output resolution
  2492.  0Ah    WORD    printer horizontal resolution (dots per inch)
  2493.  0Ch    WORD    printer vertical resolution (dots per inch)
  2494.  0Eh    WORD    reserved (FFFFh)
  2495. Note:    any field which should remain unchanged may be filled with FFFFh
  2496. ----------104C-------------------------------
  2497. INT 10 - VIDEO - DRAW ARC (Hercules GRAFIX)
  2498.     AH = 4Ch
  2499.     AL = quadrant (1 = upper right, 2 = upper left, etc)
  2500.     DI = x coordinate of center
  2501.     BP = y coordinate of center
  2502.     BX = radius
  2503. SeeAlso: AH=49h,AH=4Dh
  2504. ----------104D-------------------------------
  2505. INT 10 - VIDEO - DRAW CIRCLE (Hercules GRAFIX)
  2506.     AH = 4Dh
  2507.     DI = x of center
  2508.     BP = y of center
  2509.     BX = radius
  2510. SeeAlso: AH=49h,AH=4Ch
  2511. ----------104E-------------------------------
  2512. INT 10 - VIDEO - FILL AREA (Hercules GRAFIX)
  2513.     AH = 4Eh
  2514.     DI = x coordinate of an interior point
  2515.     BP = y coordinate of an interior point
  2516. Notes:    fills convex polygonal areas
  2517.     the first fill makes the figure solid, the second erases it
  2518. SeeAlso: AH=4Ah
  2519. ----------104F00-----------------------------
  2520. INT 10 - VESA SuperVGA BIOS - GET SuperVGA INFORMATION
  2521.     AX = 4F00h
  2522.     ES:DI -> 256-byte buffer for SuperVGA information (see below)
  2523. Return: AL = 4Fh function supported
  2524.     AH = status
  2525.         00h successful
  2526.         01h failed
  2527. SeeAlso: AX=4F01h,AX=7F00h
  2528.  
  2529. Format of SuperVGA information:
  2530. Offset    Size    Description
  2531.  00h  4 BYTEs    signature ('VESA')
  2532.  04h    WORD    VESA version number
  2533.  06h    DWORD    pointer to OEM name
  2534.         "761295520" for ATI
  2535.  0Ah  4 BYTEs    capabilities
  2536.  0Eh    DWORD    pointer to list of supported VESA and OEM video modes
  2537.         (list of words terminated with FFFFh)
  2538.  12h 238 BYTEs    reserved
  2539. ----------104F01-----------------------------
  2540. INT 10 - VESA SuperVGA BIOS - GET SuperVGA MODE INFORMATION
  2541.     AX = 4F01h
  2542.     CX = SuperVGA video mode
  2543.     ES:DI -> 256-byte buffer mode information (see below)
  2544. Return: AL = 4Fh function supported
  2545.     AH = status
  2546.         00h successful
  2547.         01h failed
  2548. SeeAlso: AX=4F00h,AX=4F02h
  2549.  
  2550. Format of mode information:
  2551. Offset    Size    Description
  2552.  00h    WORD    mode attributes
  2553.         bit 0: mode supported
  2554.         bit 1: optional information available
  2555.         bit 2: BIOS output supported
  2556.         bit 3: set if color, clear if monochrome
  2557.         bit 4: set if graphics mode, clear if text mode
  2558.  02h    BYTE    window A attributes
  2559.         bit 0: exists
  2560.         bit 1: readable
  2561.         bit 2: writable
  2562.         bits 3-7 reserved
  2563.  03h    BYTE    window B attributes (as for window A)
  2564.  04h    WORD    window granularity in K
  2565.  06h    WORD    window size in K
  2566.  08h    WORD    start segment of window A
  2567.  0Ah    WORD    start segment of window B
  2568.  0Ch    DWORD    -> FAR window positioning function (equivalent to AX=4F05h)
  2569.  10h    WORD    bytes per scan line
  2570. ---remainder is optional for VESA modes in v1.0/1.1, needed for OEM modes---
  2571.  12h    WORD    width in pixels
  2572.  14h    WORD    height in pixels
  2573.  16h    BYTE    width of character cell in pixels
  2574.  17h    BYTE    height of character cell in pixels
  2575.  18h    BYTE    number of memory planes
  2576.  19h    BYTE    number of bits per pixel
  2577.  1Ah    BYTE    number of banks
  2578.  1Bh    BYTE    memory model type
  2579.         00h text
  2580.         01h CGA graphics
  2581.         02h HGC graphics
  2582.         03h 16-color (EGA) graphics
  2583.         04h packed pixel graphics
  2584.         05h "sequ 256" (non-chain 4) graphics
  2585.         06h direct color (HiColor, 24-bit color)
  2586.         07h YUV
  2587.         08h-0Fh reserved for VESA
  2588.         10h-FFh OEM memory models
  2589.  1Ch    BYTE    size of bank in K
  2590.  1Dh    BYTE    number of image pages
  2591.  1Eh    BYTE    reserved (0)
  2592. ---VBE v1.2+---
  2593.  1Fh    BYTE    red mask size
  2594.  20h    BYTE    red field position
  2595.  21h    BYTE    green mask size
  2596.  22h    BYTE    green field size
  2597.  23h    BYTE    blue mask size
  2598.  24h    BYTE    blue field size
  2599.  25h    BYTE    reserved mask size
  2600.  26h    BYTE    reserved mask position
  2601.  27h    BYTE    direct color mode info
  2602.  28h    BYTE    reserved (0)
  2603. ----------104F02-----------------------------
  2604. INT 10 - VESA SuperVGA BIOS - SET SuperVGA VIDEO MODE
  2605.     AX = 4F02h
  2606.     BX = mode
  2607.         bit 15 set means don't clear video memory
  2608. Return: AL = 4Fh function supported
  2609.     AH = status
  2610.         00h successful
  2611.         01h failed
  2612. SeeAlso: AX=4F01h,AX=4F03h
  2613.  
  2614. Values for VESA video mode:
  2615.  00h-FFh OEM video modes (see AH=00h)
  2616.  100h    640x400x256
  2617.  101h    640x480x256
  2618.  102h    800x600x16
  2619.  103h    800x600x256
  2620.  104h    1024x768x16
  2621.  105h    1024x768x256
  2622.  106h    1280x1024x16
  2623.  107h    1280x1024x256
  2624.  108h    80x60 text
  2625.  109h    132x25 text
  2626.  10Ah    132x43 text
  2627.  10Bh    132x50 text
  2628.  10Ch    132x60 text
  2629. ---VBE v1.2---
  2630.  10Dh    320x200x32K
  2631.  10Eh    320x200x64K
  2632.  10Fh    320x200x16M
  2633.  110h    640x480x32K
  2634.  111h    640x480x64K
  2635.  112h    640x480x16M
  2636.  113h    800x600x32K
  2637.  114h    800x600x64K
  2638.  115h    800x600x16M
  2639.  116h    1024x768x32K
  2640.  117h    1024x768x64K
  2641.  118h    1024x768x16M
  2642.  119h    1280x1024x32K
  2643.  11Ah    1280x1024x64K
  2644.  11Bh    1280x1024x16M
  2645.  
  2646. Values for S3 OEM video mode:
  2647.  201h    640x480x256
  2648.  202h    800x600x16
  2649.  203h    800x600x256
  2650.  204h    1024x768x16
  2651.  205h    1024x768x256
  2652.  206h    1280x960x16
  2653.  208h    1280x1024x16
  2654.  301h    640x480x32K
  2655. ----------104F03-----------------------------
  2656. INT 10 - VESA SuperVGA BIOS - GET CURRENT VIDEO MODE
  2657.     AX = 4F03h
  2658. Return: AL = 4Fh function supported
  2659.     AH = status
  2660.         00h successful
  2661.         01h failed
  2662.     BX = video mode (see AX=4F02h)
  2663. SeeAlso: AX=4F02h
  2664. ----------104F04-----------------------------
  2665. INT 10 - VESA SuperVGA BIOS - SAVE/RESTORE SuperVGA VIDEO STATE
  2666.     AX = 4F04h
  2667.     DL = subfunction
  2668.         00h get state buffer size
  2669.         Return: BX = number of 64-byte blocks needed
  2670.         01h save video states
  2671.         ES:BX -> buffer
  2672.         02h restore video states
  2673.         ES:BX -> buffer
  2674.     CX = flags for states to save/restore
  2675.         bit 0: video hardware state
  2676.         bit 1: video BIOS data state
  2677.         bit 2: video DAC state
  2678.         bit 3: SuperVGA state
  2679. Return: AL = 4Fh function supported
  2680.     AH = status
  2681.         00h successful
  2682.         01h failed
  2683. ----------104F05-----------------------------
  2684. INT 10 - VESA SuperVGA BIOS - CPU VIDEO MEMORY CONTROL
  2685.     AX = 4F05h
  2686.     BH = subfunction
  2687.         00h select video memory window
  2688.         DX = window address in video memory (in granularity units)
  2689.         01h get video memory window
  2690.         Return: DX = window address in video memory (in gran. units)
  2691.     BL = window number
  2692.         00h window A
  2693.         01h window B
  2694. Return: AL = 4Fh function supported
  2695.     AH = status
  2696.         00h successful
  2697.         01h failed
  2698. SeeAlso: AX=4F01h,AX=4F06h,AX=4F07h,AX=7000h/BX=0004h
  2699. ----------104F06-----------------------------
  2700. INT 10 - VESA SuperVGA BIOS v1.1 - GET/SET LOGICAL SCAN LINE LENGTH
  2701.     AX = 4F06h
  2702.     BL = function
  2703.         00h set scan line length
  2704.         CX = desired width in pixels
  2705.         01h get scan line length
  2706. Return: AL = 4Fh if function supported
  2707.     AH = status
  2708.         00h successful
  2709.         01h failed
  2710.     BX = bytes per scan line
  2711.     CX = number of pixels per scan line
  2712.     DX = maximum number of scan lines
  2713. Notes:    if the desired width is not achievable, the next larger width will be
  2714.       set
  2715.     the scan line may be wider than the visible area of the screen
  2716.     this function is valid in text modes, provided that values are
  2717.       multiplied by the character cell width/height
  2718. SeeAlso: AX=4F01h,AX=4F05h,AX=4F07h
  2719. ----------104F07BH00-------------------------
  2720. INT 10 - VESA SuperVGA BIOS v1.1 - GET/SET DISPLAY START
  2721.     AX = 4F07h
  2722.     BH = 00h (reserved)
  2723.     BL = 00h set display start
  2724.         CX = leftmost displayed pixel in scan line
  2725.         DX = first displayed scan line
  2726.        = 01h get display start
  2727.         Return: BH = 00h
  2728.             CX = leftmost displayed pixel in scan line
  2729.             DX = first displayed scan line
  2730. Return: AL = 4Fh if function supported
  2731.     AH = status
  2732.         00h successful
  2733.         01h failed
  2734. Note:    this function is valid in text modes, provided that values are
  2735.       multiplied by the character cell width/height
  2736. SeeAlso: AX=4F01h,AX=4F05h,AX=4F06h
  2737. ----------104F08-----------------------------
  2738. INT 10 - VESA SuperVGA BIOS v1.2+ - GET/SET DAC PALETTE CONTROL
  2739.     AX = 4F08h
  2740.     BL = function
  2741.         00h set DAC palette width
  2742.         BH = desired number of bits per primary color
  2743.         01h get DAC palette width
  2744. Return: AL = 4Fh if function supported
  2745.     AH = status
  2746.     BH = current number of bits per primary (06h = standard VGA)
  2747. ----------104FFF-----------------------------
  2748. INT 10 - VESA SuperVGA BIOS - Everex - TURN VESA ON/OFF
  2749.     AX = 4FFFh
  2750.     DL = new state (00h off, 01h on)
  2751. Return: AX = 0000h if successful
  2752. ----------1050-------------------------------
  2753. INT 10 - SCROLOCK.COM - INSTALLATION CHECK
  2754.     AH = 50h
  2755. Return: BX = 1954h if installed
  2756.         AL = 00 if inactive, nonzero if active
  2757. Program: SCROLOCK is a utility supplied with System Enhancement Associates' ARC
  2758. SeeAlso: AH=51h
  2759. ----------105000-----------------------------
  2760. INT 10 - VIDEO - AX PC - SET SCREEN COUNTRY CODE
  2761.     AX = 5000h
  2762.     BX = country code
  2763.         0001h USA (English), 0051h Japan
  2764. Return: AL = status
  2765.         00h successful
  2766.         01h bad country code
  2767.         02h other error
  2768. SeeAlso: AX=5001h,INT 16/AX=5000h
  2769. ----------105001-----------------------------
  2770. INT 10 - VIDEO - AX PC - GET SCREEN COUNTRY CODE
  2771.     AX = 5001h
  2772. Return: AL = status
  2773.         00h successful
  2774.         BX = country code
  2775.         02h error
  2776. SeeAlso: AH=00h,AX=5000h,INT 16/AX=5001h,INT 21/AH=38h
  2777. ----------105049-----------------------------
  2778. INT 10 - VIDEO - SCREENR v1.55+ - API
  2779.     AX = 5049h ('PI')
  2780.     BX = function
  2781.         0000h installation check
  2782.         0001h lock mode
  2783.         0002h unlock mode
  2784.         0003h lock palette
  2785.         0004h unlock palette
  2786. Return: AX = 0000h if installed
  2787.         BX = TSR version (BH=major,BL=minor)
  2788.         CL = mode locking status
  2789.         00h mode not locked
  2790.         01h mode locked : INT 10/AH=00h disabled
  2791.         CH = palette locking status
  2792.         00h palette not locked
  2793.         01h palette locked, the following functions are disabled:
  2794.             AX=1000h, AX=1001h, AX=1002h, AX=1010h, AX=1012h
  2795. Program: SCREENR is a TSR supplied with Patrick Ibbetson's SCREEN display
  2796.       utility.
  2797. ----------1051-------------------------------
  2798. INT 10 - SCROLOCK.COM - ENABLE/DISABLE
  2799.     AH = 51h
  2800.     AL = state
  2801.         00h disable
  2802.         nonzero enable
  2803. Program: SCROLOCK is a utility supplied with System Enhancement Associates' ARC
  2804. SeeAlso: AH=50h"SCROLOCK"
  2805. ----------105100-----------------------------
  2806. INT 10 - VIDEO - AX PC - REGISTER EXTERNAL CHARACTER
  2807.     AX = 5100h
  2808.     BH = character width in bits (10h)
  2809.     BL = character height (10h)
  2810.     DX = character code (DH = F0h-F3h, DL=40h-7Eh,80h-FCh)
  2811.     ES:BP -> character bitmap
  2812. Return: AL = status (00h successful, 01h failed)
  2813. SeeAlso: AX=5101h,INT 1F
  2814. ----------105101-----------------------------
  2815. INT 10 - VIDEO - AX PC - READ CHARACTER
  2816.     AX = 5101h
  2817.     BH = character width in bits
  2818.     BL = character height
  2819.     DX = character code (DH = 00h if 8-bit character)
  2820.     ES:BP -> buffer for character bitmap
  2821. Return: AL = status (00h successful, 01h failed)
  2822. SeeAlso: AH=09h,AX=5100h
  2823. ----------105200-----------------------------
  2824. INT 10 - VIDEO - AX PC - SET VIRTUAL TEXT RAM BUFFER
  2825.     AX = 5200h
  2826.     BX = segment of buffer
  2827. SeeAlso: AX=5201h
  2828. ----------105201-----------------------------
  2829. INT 10 - VIDEO - AX PC - GET VIRTUAL TEXT RAM BUFFER
  2830.     AX = 5201h
  2831. Return: BX = segment of buffer or 0000h if failed
  2832. SeeAlso: AX=8300h,AH=FEh
  2833. ----------1053-------------------------------
  2834. INT 10 - Show Partner F/X v3.6 - START PRESENTATION
  2835.     AH = 53h
  2836.     DS:DX -> ASCIZ name of presentation file (no path, extension forced to
  2837.         .PR2)
  2838. Return: ???
  2839. SeeAlso: AH=55h
  2840. ----------1055-------------------------------
  2841. INT 10 - Show Partner F/X v3.6 - UNINSTALL
  2842.     AH = 55h
  2843. Return: FXSHOW.EXE removed from memory
  2844. SeeAlso: AH=53h
  2845. ----------105555-----------------------------
  2846. INT 10 - VIDEO - ATI EGA/VGA Wonder Super Switch - INSTALLATION CHECK
  2847.     AX = 5555h
  2848. Return: AX = AAAAh    if installed
  2849.     BX:CX -> ??? routine in SMS.COM resident portion
  2850.           -> data area in VCONFIG
  2851. Program: Super Switch (SMS.COM) is a video mode switch program supplied with
  2852.       ATI EGA Wonder. It also maps video mode 08h to 27h or 23h.
  2853. SeeAlso: INT 10/AH=00h,INT 2F/AX=6400h
  2854.  
  2855. Format of data area:
  2856. Offset    Size    Description
  2857.  00h    DWORD    original INT 09 vector
  2858.  04h    DWORD    original INT 10 vector
  2859.  08h    DWORD    original INT 1C vector
  2860.  0Ch    WORD    screen saver state, 0=off, 1=on
  2861.  0Eh    WORD    blanking interval in clock ticks
  2862. ----------106A00BX0000-----------------------
  2863. INT 10 - Direct Graphics Interface Standard (DGIS) - INQUIRE AVAILABLE DEVICES
  2864.     AX = 6A00h
  2865.     BX = 0000h
  2866.     CX = 0000h
  2867.     DX = buffer length (may be 0)
  2868.     ES:DI -> buffer
  2869. Return: BX = number of bytes stored in buffer
  2870.     CX = bytes required for all descriptions (0 if no DGIS)
  2871. Note:    buffer contains descriptions and addresses of DGIS-compatible
  2872.       display(s) and printer(s)
  2873. SeeAlso: AX=6A02h
  2874. ----------106A01CX0000-----------------------
  2875. INT 10 - DGIS - REDIRECT CHARACTER OUTPUT
  2876.     AX = 6A01h
  2877.     CX = 0000h
  2878.     ES:DI = address of device to send INT 10 output to
  2879. Return: CX = 0000h  output could not be redirected
  2880.          else INT 10h output now routed to requested display
  2881. SeeAlso: AX=6A02h
  2882. ----------106A02-----------------------------
  2883. INT 10 - DGIS - INQUIRE INT 10 OUTPUT DEVICE
  2884.     AX = 6A02h
  2885.     ES:DI = 0000h:0000h
  2886. Return: ES:DI = 0000h:0000h  if current display is non-DGIS
  2887.         else address of the current DGIS INT 10 display
  2888. SeeAlso: AX=6A00h,AX=6A01h
  2889. ----------106E00------------------------------------
  2890. INT 10 - Paradise VGA internal - GET ???
  2891.     AX = 6E00h
  2892. Return: AH = ??? (depends on serial number)
  2893.     AL = ???
  2894.     BX = ???
  2895.     CL = ???
  2896.     CH = ???
  2897.     DX = ???
  2898. SeeAlso: AX=6E04,AX=6E05
  2899. ----------106E04-------------------------------------
  2900. INT 10 - Paradise VGA internal - GET SCREEN SIZE AND ???
  2901.     AX = 6E04h
  2902. Return: BX = screen width (columns)
  2903.     CX = screen height (lines)
  2904.     AH = ??? (05h or FFh)
  2905.     AL = ??? (04h or video mode)
  2906. SeeAlso: AX=6E00,AX=6E05
  2907. ----------106E05-------------------------------------
  2908. INT 10 - Paradise VGA internal - SET MODE
  2909.     AX = 6E05h
  2910.     BL = mode
  2911. Note:    like AH=0, AL=BL.
  2912. SeeAlso: AH=00,AX=6E00,AX=6E04,AX=6F05h
  2913. ----------106F00-----------------------------
  2914. INT 10 - VIDEO - Video7 VGA,VEGA VGA,HP Ext BIOS - INSTALLATION CHECK
  2915.     AX = 6F00h
  2916.     BX = 0000h
  2917. Return: BX = 5637h ('V7') indicates Video7 VGA/VEGA VGA extensions are present
  2918.     BX = 4850h ('HP') indicates HP Extended BIOS video functions present
  2919. SeeAlso: AX=6F01h,AX=6F02h,AX=6F03h,AX=6F04h,AX=6F05h
  2920. ----------106F01-----------------------------
  2921. INT 10 - VIDEO - Video7 VGA,VEGA VGA,HP Ext BIOS - GET MONITOR INFO
  2922.     AX = 6F01h
  2923. Return: AL = monitor type code (HP,VEGA VGA only) (see below)
  2924.     AH = status register information
  2925.          bit  0 = display enable
  2926.             0 = display enabled
  2927.             1 = vertical or horizontal retrace in progress
  2928.          bit  1 = light pen flip flop set
  2929.          bit  2 = light pen switch activated
  2930.          bit  3 = vertical sync
  2931.          bit  4 = monitor resolution
  2932.             0 = high resolution (>200 lines)
  2933.             1 = low resolution (<=200 lines)
  2934.          bit  5 = display type
  2935.             0 = color
  2936.             1 = monochrome
  2937.          bits6,7= diagnostic bits
  2938.     CL = current value of Extended Control register (HP Ext BIOS, and only
  2939.         if AL=41h)
  2940. Note:    bits 0-3 are the same as the EGA/VGA status register bits 0-3
  2941.  
  2942. Values for monitor type code (HP Extended BIOS):
  2943.  00h    non-HP card with ROM and possibly its own INT 10h driver
  2944.  41h    MultiMode video display adapter
  2945.  42h-44h reserved
  2946.  45h    industry standard monochrome display adapter
  2947.  46h    industry standard color display adapter
  2948.  51h    reserved
  2949. ---------------------------------------------
  2950. INT 10 - VIDEO - HP Vetra EXTENDED BIOS - SET MONITOR INFO
  2951.     AX = 6F02h
  2952.     BL = new value for extende dcontrol register
  2953.         bit 0: screen resolution (0 = 200 lines, 1 = 400 lines)
  2954.         bit 1: underline enable (if set, 'blue' bit of fg color = underl)
  2955.         bit 2: font (0 = Standard-8, 1 = HP-Roman-8)
  2956.         bit 3: memory disabled for CPU access
  2957.         bit 4: allow access to full 32K memory instead of wrapping at 16K
  2958.         bit 5: select second 16K page instead of first
  2959.         bits 6,7 unused
  2960. Return:    nothing
  2961. Notes:    this function is only valid when an HP MultiMode Video Display Adapter
  2962.       is installed
  2963.     the Extended Control register is at I/O address 3DDh
  2964. SeeAlso: AX=6F01h,AX=6F03h
  2965. ---------------------------------------------
  2966. INT 10 - VIDEO - HP Vectra EXTENDED BIOS - MODIFY MONITOR INFO
  2967.     AX = 6F03h
  2968.     BH = exclude mask (set bits are not modified)
  2969.     BL = new values for bits indicated by BH (see AX=6F02h)
  2970. Return:    nothing
  2971. Note:    this function is only valid when an HP MultiMode Video Display Adapter
  2972.       is installed
  2973. SeeAlso: AX=6F01h,AX=6F02h
  2974. ----------106F04-----------------------------
  2975. INT 10 - VIDEO - Video7 VGA,VEGA VGA,HP Vectra - GET MODE AND SCREEN RESOLUTION
  2976.     AX = 6F04h
  2977. Return: AL = current video mode (see AX=6F05h)
  2978.     BX = horizontal columns (text) or pixels (graphics)
  2979.     CX = vertical columns (text) or pixels (graphics)
  2980. SeeAlso: AX=6F05h
  2981. ----------106F05-----------------------------
  2982. INT 10 - VIDEO - Video7 VGA, VEGA EXTENDED EGA/VGA - SET VIDEO MODE
  2983.     AX = 6F05h
  2984.     BL = mode (see below)
  2985. Notes:    also supported by the HP Vectra Extended BIOS
  2986.     on the HP Vectra, this function rather than AH=00h must be used to
  2987.       return to an IBM-standard mode after setting an HP-specified mode
  2988.       from 08h to 0Fh.
  2989. SeeAlso: AH=00h,AX=0070h,AX=007Eh,AX=6F04h
  2990.  
  2991. Values for video mode:
  2992.       text/ text pixel     pixel    colors    disp    scrn  system
  2993.       grph resol  box    resoltn        page    addr
  2994.  00h-13h = standard IBM modes (see AH=00h)
  2995.  08h = T   80x27           mono             HP MultiMode Video 
  2996.  09h = T   80x27                     HP MultiMode Video 
  2997.  0Ah = T   40x27           mono             HP MultiMode Video 
  2998.  0Bh = T   40x27                     HP MultiMode Video 
  2999.  0Ch = Reserved                         HP MultiMode Video 
  3000.  0Dh = G        640x400                 HP MultiMode Video 
  3001.  0Eh = G        320x400                 HP MultiMode Video 
  3002.  0Fh = G        320x400                 HP MultiMode Video 
  3003.  40h = T   80x43  8x8                     Video7/VEGA VGA
  3004.  41h = T  132x25  8x14                     Video7/VEGA VGA
  3005.  42h = T  132x43  8x8                     Video7/VEGA VGA
  3006.  43h = T   80x60  8x8                     Video7/VEGA VGA
  3007.  44h = T  100x60  8x8                     Video7/VEGA VGA
  3008.  45h = T  132x28  8x8                     Video7/VEGA VGA
  3009.  60h = G        752x410      16             Video7 VGA, VEGA VGA
  3010.  61h = G        720x540      16             Video7 VGA, VEGA VGA
  3011.      = G        720x540      16             Northgate, Headland 1024i
  3012.  62h = G        800x600      16             Video7 VGA, VEGA Ext EGA
  3013.      = G        800x600      16             Headland 1024i
  3014.  63h = G           1024x768       2             Video7 VGA
  3015.  64h = G           1024x768       4             Video7 VGA
  3016.  65h = G           1024x768      16             Video7 VGA, VEGA Ext EGA
  3017.      = G           1024x768      16             Headland 1024i
  3018.  66h = G        640x400     256             Video7 VGA, VEGA Ext VGA
  3019.      = G        640x400     256             Northgate, Headland 1024i
  3020.  67h = G        640x480     256             Video7 VGA, VEGA Ext VGA
  3021.      = G        640x480     256             Headland 1024i
  3022.  68h = G        720x540     256             Video7 VGA, VEGA Ext VGA
  3023.      = G        720x540     256             Headland 1024i
  3024.  69h = G        800x600     256             Video7 VGA, VEGA Ext VGA
  3025.      = G        800x600     256             Headland 1024i
  3026.  70h = G        752x410      16gray         Video7 VGA, VEGA VGA
  3027.  71h = G        720x540      16gray         Video7 VGA, VEGA VGA
  3028.  72h = G        800x600      16gray         Video7 VGA
  3029.  73h = G           1024x768       2gray         Video7 VGA
  3030.  74h = G           1024x768       4gray         Video7 VGA
  3031.  75h = G           1024x768      16gray         Video7 VGA
  3032.  76h = G        640x400     256gray         Video7 VGA
  3033.  77h = G        640x480     256gray         Video7 VGA
  3034.  78h = G        720x540     256gray         Video7 VGA
  3035.  79h = G        800x600     256gray         (future)
  3036. SeeAlso: AH=00h,AX=0070h,AX=007Eh,AX=6F04h
  3037. ----------106F06-----------------------------
  3038. INT 10 - VIDEO - Video7 VGA,VEGA VGA - SELECT AUTOSWITCH MODE
  3039.     AX = 6F06h
  3040.     BL = Autoswitch mode select
  3041.          00h select EGA/VGA-only modes
  3042.          01h select Autoswitched VGA/EGA/CGA/MGA modes
  3043.          02h select 'bootup' CGA/MGA modes
  3044.     BH = enable/disable (00h enable, 01h = disable selection)
  3045. ----------106F07-----------------------------
  3046. INT 10 - VIDEO -  Video7 VGA,VEGA VGA - GET VIDEO MEMORY CONFIGURATION
  3047.     AX = 6F07h
  3048. Return: AL = 6Fh
  3049.     AH = bits 0-6 = number of 256K blocks of video memory
  3050.          bit 7    = DRAM/VRAM (0: DRAM, 1: VRAM)
  3051.     BH = chip revision (SR8F) (S/C Chip in VEGA VGA)
  3052.     BL = chip revision (SR8E) (G/A Chip in VEGA VGA)
  3053.     CX = 0000h
  3054. SeeAlso: AH=12h/BL=10h
  3055. ----------1070-------------------------------
  3056. INT 10 - VIDEO - TANDY 2000 only - GET ADDRESS OF VIDEO RAM
  3057.     AH = 70h
  3058. Return: AX:BX -> WORD containing green plane's offset
  3059.     AX:CX -> WORD containing green plane's segment
  3060.     AX:DX -> WORD containing segment of red (offset 0) and blue (offset
  3061.             4000) planes
  3062. SeeAlso: AH=71h
  3063. ----------107000BX0000-----------------------
  3064. INT 10 - Everex Extended Video BIOS - RETURN EMULATION STATUS
  3065.     AX = 7000h
  3066.     BX = 0000h
  3067. Return: AL = 70h if Trident-based Everex card
  3068.     CL = monitor type
  3069.         00h mono
  3070.         01h CGA
  3071.         02h EGA
  3072.         03h digital multifrequency
  3073.         04h IBM PS/2
  3074.         05h IBM 8514
  3075.         06h SuperVGA
  3076.         07h analog multifrequency
  3077.         08h super multifrequency
  3078.     CH = feature bits
  3079.         bits 7,6: 00 = 256K memory
  3080.               01 = 512K memory
  3081.               10 = 1024K
  3082.               11 = 2048K memory
  3083.         bit 5:    special oscillator present
  3084.         bit 4:    VGA protect enabled
  3085.         bit 0:    6845 emulation
  3086.     DX = video board info
  3087.         bits 4-15: board ID model
  3088.         bits 0-3:  board ID revision
  3089.     DI = BCD BIOS version number
  3090. Note:    board models for Trident-based Everex cards:
  3091.         236h Ultragraphics II
  3092.         620h Vision VGA
  3093.         673h EVGA
  3094.         678h Viewpoint
  3095. ----------107000BX0004-----------------------
  3096. INT 10 - Everex Extended Video BIOS - GET PAGING FUNCTION POINTER FOR CURR MODE
  3097.     AX = 7000h
  3098.     BX = 0004h
  3099. Return: ES:DI -> FAR paging function (call with DL = page to set)
  3100. Note:    the word preceding ES:DI is the length of the function in bytes, and
  3101.       the last byte of the function is a FAR return instruction.
  3102. SeeAlso: AX=4F05h,AX=7000h/BX=0000h,AX=7000h/BX=0005h
  3103. ----------107000BX0005-----------------------
  3104. INT 10 - Everex Extended Video BIOS - GET SUPPORTED MODE INFO
  3105.     AX = 7000h
  3106.     BX = 0005h
  3107.     CL = maximum number of modes to get info for
  3108.     CH = mode type to get info for (see below)
  3109.     DL = monitor type to get info for
  3110.     ES:DI -> buffer for mode info (see below)
  3111. Return: CL = total number of modes fitting criteria
  3112.     CH = size of each info record
  3113. SeeAlso: AX=7000h/BX=0000h,AX=7000h/BX=0004h
  3114.  
  3115. Values for mode type:
  3116.  00h all modes
  3117.  01h monochrome text modes
  3118.  02h color text modes
  3119.  03h four-color CGA graphics modes
  3120.  04h two-color CGA graphics modes
  3121.  05h 16-color graphics modes
  3122.  06h 256-color graphics modes
  3123.  
  3124. Format of mode information record:
  3125. Offset    Size    Description
  3126.  00h    BYTE    mode number (bit 7 set if extended mode)
  3127.  01h    BYTE    mode type (see above)
  3128.  02h    BYTE    info bits
  3129.         bits 7,6 reserved
  3130.              5     monochrome mode
  3131.              4     interlaced display
  3132.              3     requires special oscillator
  3133.              2,1 memory required
  3134.              00 = 256K
  3135.              01 = 512K
  3136.              10 = 1024K
  3137.              11 = 2048K
  3138.              0     reserved
  3139.  03h    BYTE    font height
  3140.  04h    BYTE    text columns on screen
  3141.  05h    BYTE    text rows on screen
  3142.  06h    WORD    number of scan lines
  3143.  08h    BYTE    color information
  3144.         bits 7-4 reserved
  3145.              3-0 bits per pixel
  3146. ----------1071-------------------------------
  3147. INT 10 - VIDEO - TANDY 2000 only - GET ADDRESS OF INCRAM
  3148.     AH = 71h
  3149. Return: AX:BX -> WORD containing segment address of INCRAM
  3150.     AX:CX -> WORD containing offset of INCRAM
  3151. SeeAlso: AH=70h
  3152. ----------1072-------------------------------
  3153. INT 10 - VIDEO - TANDY 2000 only - SCROLL RIGHT PART OR ALL OF SCREEN
  3154.     AH = 72h
  3155.     AL = number of columns to shift scroll area, 00h to clear entire area
  3156.     BH = new attributes for blanked columns at left
  3157.     CH,CL = row, column of upper left corner of scroll area
  3158.     DH,DL = row, column of lower right corner of scroll area
  3159. SeeAlso: AH=06h,AH=07h,AH=73h,INT 15/AH=12h/BH=05h
  3160. ----------1073------------------------------
  3161. INT 10 - VIDEO - TANDY 2000 only - SCROLL LEFT PART OR ALL OF SCREEN
  3162.     AH = 73h
  3163.     AL = number of columns to shift scroll area, 00h to clear entire area
  3164.     BH = new attributes for blanked columns at right
  3165.     CH,CL = row, column of upper left corner of scroll area
  3166.     DH,DL = row, column of lower right corner of scroll area
  3167. SeeAlso: AH=06h,AH=07h,AH=72h,INT 15/AH=12h/BH=05h
  3168. ----------107F00-----------------------------
  3169. INT 10 - SOLLEX SuperVGA - GET EXTENSIONS INFO
  3170.     AX = 7F00h
  3171. Return: AL != 7Fh if not supported
  3172.     AL = 7Fh if supported
  3173.         AH = status
  3174.         00h successful
  3175.             ES:DI -> info structure (see below)
  3176.         01h failed
  3177. SeeAlso: AX=4F00h
  3178.  
  3179. Format of info structure:
  3180. Offset    Size    Description
  3181.  00h    DWORD    pointer to VESA function dispatch table
  3182.  04h    DWORD    pointer to SOLLEX function dispatch table
  3183.  08h    DWORD    pointer to VESA SuperVGA info (see AX=4F00h)
  3184.  0Ch    DWORD    pointer to mode info structure table, consisting of
  3185.         alternating ResInfo (see below) and VESA mode information
  3186.         (see AX=4F01h) blocks, terminated with an FFFFh word
  3187.  10h    DWORD    pointer to font info structure table (see below)
  3188.  14h    WORD    high resolution crystal frequency in Hz (0000h = not present)
  3189.  16h    DWORD    pointer to ASCIZ ID string
  3190.  1Ah    DWORD    pointer to timeout reset table
  3191.         array of bytes, each a multiple of the minimum time increment
  3192.  1Eh    WORD    minimum time increment in timer ticks
  3193.  20h    BYTE    inverse options supported
  3194.         bit 0: inverse supported
  3195.         bits 1-7: reserved
  3196.  21h    BYTE    normal color value
  3197.  22h    BYTE    inverse color value
  3198.  23h    WORD    port to be accessed for normal/inverse settings
  3199.  25h    WORD    type of interface chip (currently undefined)
  3200.  27h    WORD    program operational mode
  3201.         bits 1-0: 00 no preference
  3202.               01 terse (minimum detail in program messages)
  3203.               10 verbose
  3204.               11 use menus if supported, verbose mode otherwise
  3205.         bits 7-2: reserved
  3206.  29h    WORD    SOLLEX specification version
  3207.  2Bh    WORD    version of VESA/SOLLEX implementation
  3208.  2Dh    DWORD    offset to relocatable portion of SOLLEX extensions (for CONFIG)
  3209.  2Eh    DWORD    offset to unused section of the extensions ROM
  3210.  31h 16 BYTEs    reserved
  3211. Note:    all DWORD pointers initially require segment fixups; if the segment
  3212.       is 0000h, it should be changed to the returned ES, otherwise it
  3213.       may be assumed to be correct
  3214.  
  3215. Format of ResInfo:
  3216. Offset    Size    Description
  3217.  00h    WORD    16-bit mode number
  3218.  02h    WORD    adapter type (00h VGA, 01h EGA, 02h CGA, 03h MDA)
  3219.  04h    WORD    display info (see AX=7F01h/BL=01h)
  3220.  06h    DWORD    pointer to video parameter table
  3221.  0Ah    BYTE    replacement entry in master Video Parameter
  3222.  0Bh    BYTE    mode requested for mode set by BIOS
  3223.  0Ch    DWORD    pointer to LoadReg table
  3224.  10h    BYTE    index into table of clock values (see below)
  3225.  
  3226. Format of font info table [array] entry:
  3227. Offset    Size    Description
  3228.  00h    BYTE    required font height
  3229.  01h    BYTE    parameter to load text mode font
  3230.  02h    BYTE    parameter to load graphics mode font
  3231.  
  3232. Values for clock value index:
  3233.  00h    25 MHz
  3234.  01h    28 MHz
  3235.  02h    PCLK
  3236.  03h    31.5 MHz (VESA 640x480)
  3237.  04h    reserved
  3238.  05h    16 MHz (EGA)
  3239.  06h    PCLK
  3240.  07h    24 MHz (EGA)
  3241.  08h    25 MHz
  3242.  09h    28 MHz
  3243.  0Ah    36 MHz
  3244.  0Bh    45 MHz (for 1024x768)
  3245.  0Ch    80 MHz
  3246.  0Dh    40 MHz
  3247.  0Eh    65 MHz
  3248.  0Fh     1 MHz (for powerdown)
  3249. ----------107F01BL00-------------------------
  3250. INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - SET ADAPTER
  3251.     AX = 7F01h
  3252.     BL = 00h
  3253.     CX = adapter request
  3254.         bits 1-0: adapter type (00 VGA, 01 EGA, 10 CGA, 11 MDA)
  3255.         bit 2:    reserved
  3256.         bits 4-3: change displays (00 none, 01 analog 10 digital 11 panel)
  3257.         bits 6-5: desired monitor sense (01 color, 10 mono, 11=8514)
  3258.         bit 7:    lock override
  3259.         bit 8:    alternate adapter mode
  3260.         bits 15-9: reserved
  3261. Return: AL != 7Fh if not supported
  3262.     AL = 7Fh if supported
  3263.         AH = status
  3264.         00h successful
  3265.         01h failed
  3266. Note:    initializes video hardware to a particular standard
  3267. SeeAlso: AX=7F00h,AX=7F01h/BL=01h,AX=7F01h/BL=02h
  3268. ----------107F01BL01-------------------------
  3269. INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - GET ADAPTER
  3270.     AX = 7F01h
  3271.     BL = 01h
  3272. Return: AL != 7Fh if not supported
  3273.     AL = 7Fh if supported
  3274.         AH = status
  3275.         00h successful
  3276.         01h failed
  3277.         BX = adapter type (see AX=7F01h/BL=00h)
  3278.         DX = display type
  3279.         bits 1-0: monitor sense (00 none, 01 color, 10 mono, 11=8514)
  3280.         bit 2:      multi-frequency analog monitor active
  3281.         bit 3:      LCD panel active
  3282.         bit 4:      plasma/electroluminescent panel active
  3283.         bit 5:      PS/2-type monitor active
  3284.         bit 6:      multi-frequency digital monitor active
  3285.         bit 7:      Enhanced Color Display monitor active
  3286.         bit 8:      alternate display active
  3287.         bits 15-9: reserved
  3288. SeeAlso: AX=7F00h,AX=7F01h/BL=00h,AX=7F01h/BL=02h
  3289. ----------107F01BL02-------------------------
  3290. INT 10 - SOLLEX SuperVGA - ADAPTER CONTROL - DETERMINE ADAPTER SUPPORT
  3291.     AX = 7F01h
  3292.     BL = 02h
  3293.     CX = adapter request (see AX=7F01h/BL=00h)
  3294. Return: AL != 7Fh if not supported
  3295.     AL = 7Fh if supported
  3296.         AH = status
  3297.         00h requested setting can successfully be made
  3298.         01h requested setting not available in this configuration
  3299. SeeAlso: AX=7F00h,AX=7F01h/BL=00h
  3300. ----------107F02BL00-------------------------
  3301. INT 10 - SOLLEX SuperVGA - DISPLAY OUTPUT CONTROL - SET DISPLAY OUTPUT
  3302.     AX = 7F02h
  3303.     BL = 00h
  3304.     CX = display output setting
  3305.         bit 0: CRTC control in bits 2,1 valid
  3306.         bit 1: enable digital output
  3307.         bit 2: enable analog output
  3308.         bit 3: panel control in bits 5,4 valid
  3309.         bit 4: enable LCD output
  3310.         bit 5: enable plasma/EL output
  3311.         bit 6: inverse control in bit 7 valid
  3312.         bit 7: 0=normal, 1=inverse
  3313.         bits 15-8 reserved
  3314. Return: AL != 7Fh if not supported
  3315.     AL = 7Fh if supported
  3316.         AH = status
  3317.         00h successful
  3318.         01h failed
  3319. SeeAlso: AX=7F00h,AX=7F02h/BL=00h
  3320. ----------107F02BL01-------------------------
  3321. INT 10 - SOLLEX SuperVGA - DISPLAY OUTPUT CONTROL - GET DISPLAY OUTPUT
  3322.     AX = 7F02h
  3323.     BL = 01h
  3324. Return: AL != 7Fh if not supported
  3325.     AL = 7Fh if supported
  3326.         AH = status
  3327.         00h successful
  3328.             BX = display output setting (see AX=7F02h/BL=00h)
  3329.             CX = displays attached
  3330.             bit 0: PS/2 display on analog output
  3331.             bit 1: multi-frequency monitor on analog output
  3332.             bit 2: LCD panel attached
  3333.             bit 3: plasma/electroluminescent panel attached
  3334.             bit 4: multi-frequency monitor on digital output
  3335.             bit 5: Enhanced Color Display attached to digital outpt
  3336.             bit 6: alternate display
  3337.             bits 15-7: reserved
  3338.         01h failed
  3339. SeeAlso: AX=7F00h,AX=7F02h/BL=00h
  3340. ----------107F03BL00-------------------------
  3341. INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - GET SUPPORT INFO
  3342.     AX = 7F03h
  3343.     BL = 00h
  3344.     CX = support type
  3345.         0000h VGA, 0001h EGA, 0002h CGA, 0003h MDA, 0004h extensions,
  3346.         0005h-0012h reserved for SOLLEX, 0013h Hercules,
  3347.         0014h-001Fh reserved for SOLLEX, 0020h-00FFh reserved for OEM
  3348. Return: AL != 7Fh if not supported
  3349.     AL = 7Fh if supported
  3350.         AH = status
  3351.         00h successful
  3352.             CX = size of video support code
  3353.             DX = segment of physical video support (0000h if no ROM)
  3354.             ES = segment of active video support
  3355.             ES:DI -> information block (DI = 0000h if none available)
  3356.         01h failed
  3357. SeeAlso: AX=7F03h/BL=01h
  3358. ----------107F03BL01-------------------------
  3359. INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - INITIALIZE VIDEO SUPPORT
  3360.     AX = 7F03h
  3361.     BL = 01h
  3362.     CX = support request
  3363.     ES = segment of support code
  3364. Return: AL != 7Fh if not supported
  3365.     AL = 7Fh if supported
  3366.         AH = status
  3367.         00h successful
  3368.         01h failed
  3369. Note:    initializes the indicated video support by calling ES:0003h; this
  3370.       function may be used to switch the active video support back to
  3371.       ROM after AX=7F03h/BL=02h
  3372. SeeAlso: AX=7F03h/BL=00h
  3373. ----------107F03BL02-------------------------
  3374. INT 10 - SOLLEX SuperVGA - VIDEO SUPPORT CONTROL - GO RAM RESIDENT
  3375.     AX = 7F03h
  3376.     BL = 02h
  3377.     CX = support request
  3378.     ES = destination segment
  3379. Return: AL != 7Fh if not supported
  3380.     AL = 7Fh if supported
  3381.         AH = status
  3382.         00h successful
  3383.         01h failed
  3384. SeeAlso: AX=7F00h,AX=7F03h/BL=01h
  3385. ----------107F04BL00-------------------------
  3386. INT 10 - SOLLEX SuperVGA - POWER CONTROL - SET POWER STATE
  3387.     AX = 7F04h
  3388.     BL = 00h
  3389.     CX = new power state
  3390. Return: AL != 7Fh if not supported
  3391.     AL = 7Fh if supported
  3392.         AH = status
  3393.         00h successful
  3394.         01h failed
  3395. Note:    higher values progressively reduce the operations available on the
  3396.       video adapter while yielding increasing power savings
  3397. SeeAlso: AX=7F00h,AX=7F04h/BL=01h
  3398. ----------107F04BL01-------------------------
  3399. INT 10 - SOLLEX SuperVGA - POWER CONTROL - GET POWER STATE
  3400.     AX = 7F04h
  3401.     BL = 01h
  3402. Return: AL != 7Fh if not supported
  3403.     AL = 7Fh if supported
  3404.         AH = status
  3405.         00h successful
  3406.             CX = current power state
  3407.             DX = maximum state
  3408.         01h failed
  3409. SeeAlso: AX=7F00h,AX=7F04h/BL=00h
  3410. ----------107F04BL02-------------------------
  3411. INT 10 - SOLLEX SuperVGA - POWER CONTROL - SET TIMEOUT RESET
  3412.     AX = 7F04h
  3413.     BL = 02h
  3414.     CX = timeout reset
  3415. Return: AL != 7Fh if not supported
  3416.     AL = 7Fh if supported
  3417.         AH = status
  3418.         00h successful
  3419.         01h failed
  3420. SeeAlso: AX=7F00h,AX=7F04h/BL=03h
  3421. ----------107F04BL03-------------------------
  3422. INT 10 - SOLLEX SuperVGA - POWER CONTROL - GET TIMEOUT RESET
  3423.     AX = 7F04h
  3424.     BL = 03h
  3425. Return: AL != 7Fh if not supported
  3426.     AL = 7Fh if supported
  3427.         AH = status
  3428.         00h successful
  3429.             BX = time increment
  3430.             CX = current timeout reset
  3431.             DX = maximum timeout reset
  3432.             ES:DI -> timeout reset table (array of bytes)
  3433.         01h failed
  3434. Note:    the timeout period is computed as (BYTE ES:[DI+CX]) * BX timer ticks
  3435. SeeAlso: AX=7F00h,AX=7F04h/BL=02h
  3436. ----------107F05-----------------------------
  3437. INT 10 - SOLLEX SuperVGA - LOAD REGISTER
  3438.     AX = 7F05h
  3439.     ES:DI -> register value table (see below)
  3440. Return: AL != 7Fh if not supported
  3441.     AL = 7Fh if supported
  3442.         AH = status
  3443.         00h successful
  3444.         01h failed
  3445. SeeAlso: AH=F1h,AH=F3h,AH=F5h
  3446.  
  3447. Format of register value table:
  3448. Offset    Size    Description
  3449.  00h    WORD    base I/O register (FFFFh = end of list)
  3450.  02h 2N BYTEs    pairs of values to be written to the base I/O register as an
  3451.         index value and the following register as a data byte
  3452.  2N+2    WORD    FFFFh (end of data list)
  3453.     ... (repeats until FFFFh base address)
  3454. ----------107F06-----------------------------
  3455. INT 10 - SOLLEX SuperVGA - MULTIPLE FONT CONTROL
  3456.     AX = 7F06h
  3457.     BL = subfunction
  3458.         00h set multiple font state
  3459.         CX = new state (00h off, 01h on)
  3460.         01h get multiple font state
  3461.         Return: BL = current state (00h off, 01h on)
  3462. Return: AL != 7Fh if not supported
  3463.     AL = 7Fh if supported
  3464.         AH = status
  3465.         00h successful
  3466.         01h failed
  3467. SeeAlso: AH=11h
  3468. ----------107F07-----------------------------
  3469. INT 10 - SOLLEX SuperVGA - FILL VIDEO RAM
  3470.     AX = 7F07h
  3471.     BL = how much to fill
  3472.        00h regen size
  3473.        01h all video memory
  3474.     CX = pattern to write (normally 0720h for text modes and 0000h for gr)
  3475. Return: AL != 7Fh if not supported
  3476.     AL = 7Fh if supported
  3477.         AH = status
  3478.         00h successful
  3479.         01h failed
  3480. SeeAlso: AH=06h
  3481. ----------1080--DX4456-----------------------
  3482. INT 10 U - VIDEO - DESQview 2.0x only - internal - SET ??? HANDLER
  3483.     AH = 80h
  3484.     DX = 4456h ('DV')
  3485.     ES:DI -> FAR subroutine to be called on ???
  3486. Return: DS = segment of DESQview data structure for video buffer
  3487. Note:    this function is probably meant for internal use only, due to the magic
  3488.       value required in DX
  3489.     the subroutine seems to be called when the DESQview menu is accessed;
  3490.       on entry, AL = 03h or 04h
  3491. ----------1081--DX4456-----------------------
  3492. INT 10 U - VIDEO - DESQview 2.0x only - internal - GET ???
  3493.     AH = 81h
  3494.     DX = 4456h ('DV')
  3495. Return: ES = segment of DESQview data structure for video buffer
  3496.         BYTE ES:[0] = current window number in DV 2.0x
  3497. Note:    this function is probably meant for internal use only, due to the magic
  3498.       value required in DX
  3499. SeeAlso: AH=82h
  3500. ----------1082--DX4456-----------------------
  3501. INT 10 U - VIDEO - DESQview 2.0x only - internal - GET CURRENT WINDOW INFO
  3502.     AH = 82h
  3503.     DX = 4456h ('DV')
  3504. Return: DS = segment in DESQview for data structure
  3505.          in DV 2.00,
  3506.           BYTE DS:[0] = window number
  3507.           WORD DS:[1] = segment of other data structure
  3508.           WORD DS:[3] = segment of window's object handle
  3509.     ES = segment of DESQview data structure for video buffer
  3510.     AL = current window number
  3511.     AH = ???
  3512.     BL = direct screen writes
  3513.         00h program does not do direct writes
  3514.         01h program does direct writes, so shadow buffer not usable
  3515.     BH = ???
  3516.     CL = current video mode
  3517.     CH = ???
  3518. Note:    this function is probably meant for internal use only, due to the magic
  3519.       value required in DX
  3520. SeeAlso: AH=81h
  3521. ----------108200-----------------------------
  3522. INT 10 - VIDEO - AX PC - GET/SET SCROLL MODE
  3523.     AX = 8200h
  3524.     BL = new scroll mode or FFh to get current mode
  3525.         00h dynamic, 01h software
  3526. Return: AL = scroll mode (current mode if BL=FFh, previous mode otherwise)
  3527. SeeAlso: AH=06h,AH=07h
  3528. ----------108300-----------------------------
  3529. INT 10 - VIDEO - AX PC - GET VIDEO RAM ADDRESS
  3530.     AX = 8300h
  3531. Return: AX = offset of video RAM
  3532.     ES:BX -> virtual text RAM buffer
  3533. SeeAlso: AX=5201h
  3534. ----------108B-------------------------------
  3535. INT 10 - Alloy MW386 - FORCE WORKSTATION SCREEN UPDATE
  3536.     AH = 8Bh
  3537. SeeAlso: AH=92h,AH=93h
  3538. ----------1090-------------------------------
  3539. INT 10 - Alloy MW386 - GET PHYSICAL WORKSTATION DISPLAY MODE
  3540.     AH = 90h
  3541. Return: AL = current video mode (see AH=00h)
  3542. SeeAlso: AH=91h
  3543. ----------1091-------------------------------
  3544. INT 10 - Alloy MW386 - GET PHYSICAL WORKSTATION ADAPTER TYPE
  3545.     AH = 91h
  3546. Return: AL = video adapter type
  3547.         00h monochrome
  3548.         01h Hercules monochrome graphics
  3549.         02h CGA
  3550.         03h EGA
  3551.         04h VGA
  3552.         80h monochrome text terminal
  3553.         81h Hercules graphics terminal
  3554.         82h color graphics terminal
  3555. Note:    types less than 80h do not imply that the current user is on the host
  3556. SeeAlso: AH=90h
  3557. ----------1092-------------------------------
  3558. INT 10 - Alloy MW386 - INHIBIT WORKSTATION SCREEN UPDATES
  3559.     AH = 92h
  3560. Note:    the terminal will be updated even when screen updates are inhibited if
  3561.       TTY output is used
  3562. SeeAlso: AH=8Bh
  3563. ----------1093-------------------------------
  3564. INT 10 - Alloy MW386 - REDRAW SCREEN
  3565.     AH = 93h
  3566. SeeAlso: AH=8Bh
  3567. ----------10BF00-----------------------------
  3568. INT 10 - VIDEO - Compaq Portable Extensions - SELECT EXTERNAL MONITOR
  3569.     AX = BF00h
  3570. Note:    all registers preserved and the internal monitor is blanked
  3571.     the external monitor becomes the active monitor
  3572. SeeAlso: AX=BF01h
  3573. ----------10BF01-----------------------------
  3574. INT 10 - VIDEO - Compaq Portable Extensions - SELECT INTERNAL MONITOR
  3575.     AX = BF01h
  3576. Note:    all registers preserved and the external monitor is blanked
  3577.     the internal monitor becomes the active monitor
  3578. SeeAlso: AX=BF00h
  3579. ----------10BF02-----------------------------
  3580. INT 10 - VIDEO - Compaq Portable Extensions - SET MASTER MODE OF CURRENT CTRLR
  3581.     AX = BF02h
  3582.     BH = master mode
  3583.         04h CGA
  3584.         05h EGA
  3585.         07h MDA
  3586. SeeAlso: AX=BF03h
  3587. ----------10BF03BX0000-----------------------
  3588. INT 10 - VIDEO - Compaq Portable/Systempro Extensions - GET ENVIRONMENT
  3589.     AX = BF03h
  3590.     BX = 0000h
  3591. Return: BH = active monitor
  3592.         00h = external
  3593.         01h = internal
  3594.     BL = master mode
  3595.         00h = switchable VDU not present
  3596.         04h = CGA
  3597.         05h = EGA
  3598.         07h = MDA
  3599.         08h = switchable LCD controller present
  3600.     CH = 00h (reserved)
  3601.     CL = switchable VDU mode supported
  3602.         bit     0   = CGA supported
  3603.         bits 1,2 = reserved (1)
  3604.         bit     3   = MDA supported
  3605.         bits 4-7 = reserved (1)
  3606.     DH = internal monitor type
  3607.         00h = none
  3608.         01h = Dual-mode monitor
  3609.         02h = 5153 RGB monitor
  3610.         03h = Compaq Color monitor
  3611.         04h = 640x400 flat panel
  3612.         07h = LCD VGA
  3613.     DL = external monitor type
  3614.         00h = none
  3615.         01h = dual-mode monitor
  3616.         02h = 5153 RGB monitor
  3617.         03h = Compaq Color monitor
  3618.         04h = 640x400 flat panel
  3619.         05h = VGC monochrome
  3620.         06h = VGC color
  3621. SeeAlso: AH=1Ah,AX=BF00h,AX=BF01h,AX=BF02h
  3622. ----------10BF04-----------------------------
  3623. INT 10 - VIDEO - Compaq Portable Extensions - SET MODE SWITCH DELAY
  3624.     AX = BF04h
  3625.     BH = new state of delay
  3626.         00h enabled
  3627.         01h disabled
  3628. SeeAlso: AX=BF05h
  3629. ----------10BF05-----------------------------
  3630. INT 10 - VIDEO - Compaq Systempro Extensions - ENABLE/DISABLE DISPLAY
  3631.     AX = BF05h
  3632.     BH = new state of video
  3633.         00h off
  3634.         01h on
  3635. SeeAlso: AX=BF04h
  3636. ----------10BF06-----------------------------
  3637. INT 10 - VIDEO - Compaq SLT/286 - READ GRAY SCALE TABLE
  3638.     AX = BF06h
  3639.     CL = address to be read from gray scale table
  3640. Return: AL = bit 3-0 - Value read from gray scale table
  3641.     CL = address to be read from gray scale table
  3642. SeeAlso: AH=12h/BL=33h,AX=BF07h
  3643. ----------10BF07-----------------------------
  3644. INT 10 - VIDEO - Compaq SLT/286 - WRITE GRAY SCALE TABLE
  3645.     AX = BF07h
  3646.     CH = value to write to gray scale table
  3647.     CL = address to be written to gray scale table
  3648. SeeAlso: AX=BF06h
  3649. ----------10BF08-----------------------------
  3650. INT 10 - VIDEO - Compaq SLT/286 - WRITE COLOR MIX REGISTERS
  3651.     AX = BF08h
  3652.     CH = bits 7-4 - Green weight
  3653.          bits 3-0 - Blue weight
  3654.     CL = bits 7-4 - unused
  3655.          bits 3-0 - Red weight
  3656. ----------10CC00SI0000-----------------------
  3657. INT 10 - VIDEO - UltraVision - GET STATUS (INSTALLATION CHECK)
  3658.     AX = CC00h
  3659.     SI = 0000h (if checking version)
  3660. Return: CX = ABCDh
  3661.     AL = Ultravision extensions
  3662.         00h enabled
  3663.         FFh disabled
  3664.     AH = card designator
  3665.     BX:00F0h -> palette values (for compatibility with NEWFONT)
  3666.     DX = support for high resolution modes
  3667.         00h not active
  3668.         01h active
  3669.     SI = UltraVision version number (v1.2+), high byte=major,low byte=minor
  3670.        = unchanged for versions <1.2
  3671. SeeAlso: AX=CC01h,AX=CC02h
  3672. ----------10CC01-----------------------------
  3673. INT 10 - VIDEO - UltraVision - DISABLE EXTENSIONS
  3674.     AX = CC01h
  3675. Notes:    subsequent BIOS calls will be passed through to previous handler
  3676.     should be followed immediately by mode set to restore normal EGA/VGA
  3677.       state
  3678. SeeAlso: AX=CC02h
  3679. ----------10CC02-----------------------------
  3680. INT 10 - VIDEO - UltraVision - ENABLE EXTENSIONS
  3681.     AX = CC02h
  3682. Note:    should be followed immediately by mode set to restore previous
  3683.       UltraVision state
  3684. SeeAlso: AX=CC01h
  3685. ----------10CD00-----------------------------
  3686. INT 10 - VIDEO - UltraVision - LOAD ULTRAVISION PALETTE (color EGA,VGA)
  3687.     AX = CD00h
  3688.     CL = palette table number (01h-07h for v1.x, 01h-0Fh for v2+)
  3689.     DS:DX -> 16-byte palette register list (colors for registers 00h-0Fh)
  3690. Notes:    if palette locking is in effect for the current mode, the new colors
  3691.       will be displayed immediately; otherwise, the system reverts to the
  3692.       default palette
  3693.     palette table 0 is reserved for the default palette and cannot be set
  3694.     UltraVision always sets the border color to black
  3695. SeeAlso: AX=CD01h,AX=CD02h
  3696. ----------10CD01-----------------------------
  3697. INT 10 - VIDEO - UltraVision - SET PALETTE LOCKING STATUS (color EGA,VGA)
  3698.     AX = CD01h
  3699.     CL = palette locking value
  3700.         00h none
  3701.         01h text modes only (02h,03h)
  3702.         FFh all modes (all standard color text and graphics modes)
  3703. Notes:    intended for video modes with 16 or fewer colors
  3704. SeeAlso: AX=1000h,AX=1002h,AX=CD00h,AX=CD03h
  3705. ----------10CD02-----------------------------
  3706. INT 10 - VIDEO - UltraVision - GET ULTRAVISION PALETTE (EGA,VGA)
  3707.     AX = CD02h
  3708. Return: CL = palette table number
  3709.     DS:DX -> 17-byte palette register list
  3710.     DS:SI -> current font names table (see below)
  3711. Note:    only the font names are valid on monochrome EGA systems
  3712. SeeAlso: AX=1009h,AX=CD00h
  3713.  
  3714. Format of palette register list:
  3715. Offset    Size    Description
  3716.  00h 16 BYTEs    colors for palette registers 00h through 0Fh
  3717.  10h    BYTE    border color
  3718.  
  3719. Format of current font names table (v2+):
  3720. Offset    Size    standard EGA    HiRes EGA    VGA
  3721.  00h  8 BYTEs    N/A        F19 font    F20 font
  3722.  08h  8 BYTEs    F14 font    F14 font    F14 font
  3723.  10h  8 BYTEs    N/A        F11 font    F10 font
  3724.  18h  8 BYTEs    F8 font        F8 font        F8 font
  3725.  
  3726. Format of current font names table (v1.x):
  3727. Offset    Size    HiRes EGA
  3728.  00h  8 BYTEs    F19/F14 font
  3729.  08h  8 BYTEs    F11/F8 font
  3730. ----------10CD03-----------------------------
  3731. INT 10 - VIDEO - UltraVision - GET PALETTE LOCKING STATUS (color EGA,VGA)
  3732.     AX = CD03h
  3733. Return: CL = palette locking value
  3734.         00h none
  3735.         01h text modes only
  3736.         FFh all modes
  3737. SeeAlso: AX=CD01h
  3738. ----------10CD04-----------------------------
  3739. INT 10 - VIDEO - UltraVision - GET UltraVision TEXT MODE (EGA,VGA)
  3740.     AX = CD04h
  3741. Return: AL = mode number
  3742.         11h 80x25
  3743.         12h 80x43, 80x50
  3744.         13h 80x34, 80x36
  3745.         14h 80x60, 80x63
  3746.         19h 94x25
  3747.         1Ah 94x43, 94x50
  3748.         1Bh 94x36
  3749.         1Ch 94x63
  3750.         21h 108x25
  3751.         22h 108x43, 108x50
  3752.         23h 107x34, 108x36
  3753.         24h 108x60, 108x63
  3754.         31h 120x25
  3755.         32h 120x43, 120x50
  3756.         33h 132x25
  3757.         34h 132x44, 132x50
  3758.         39h 120x36
  3759.         3Ah 120x63
  3760.         3Bh 132x36
  3761.         3Ch 132x60
  3762. SeeAlso: AH=0Fh,AX=CC00h,AH=CDh
  3763. ----------10CD05-----------------------------
  3764. INT 10 - VIDEO - UltraVision - SET CURSOR TYPE (EGA,VGA)
  3765.     AX = CD05h
  3766.     CL = type
  3767.         00h line cursor
  3768.         FFh box cursor
  3769. Note:    sets default cursor type for text-based programs
  3770. SeeAlso: AH=01h,AX=CD06h
  3771. ----------10CD06-----------------------------
  3772. INT 10 - VIDEO - UltraVision - GET CURSOR TYPE (EGA,VGA)
  3773.     AX = CD06h
  3774. Return:    CL = type
  3775.         00h line cursor
  3776.         FFh box cursor
  3777. SeeAlso: AH=03h,AX=CD05h
  3778. ----------10CD07-----------------------------
  3779. INT 10 - VIDEO - UltraVision v1.2+ - SET UNDERLINE STATUS (EGA,VGA)
  3780.     AX = CD07h
  3781.     CL = hardware underline status
  3782.         00h off (color systems only)
  3783.         01h underline below characters
  3784.         02h strike through characters
  3785.     BL = foreground color for normal text (FFh = current)
  3786.     BH = foreground color for bright text (FFh = current)
  3787. Return: CL = hardware underline status
  3788.     BL = current foreground color for normal text
  3789.     BH = current foreground color for bright text
  3790. Notes:    when underline or strikeout is enabled in color text modes, the
  3791.       specified colors will be assigned temporarily to colors 01h and 09h,
  3792.       allowing affected text to match non-underlined text.    The color
  3793.       remapping uses values from the current onscreen palette regardless
  3794.       of the palette locking status (see AX=CD01h)
  3795.     specify the standard colors (BL=01h,BH=09h) to enable underline or
  3796.       strikeout without color remapping
  3797. SeeAlso: AX=CD08h
  3798. ----------10CD08-----------------------------
  3799. INT 10 - VIDEO - UltraVision v1.2+ - GET UNDERLINE STATUS (EGA,VGA)
  3800.     AX = CD08h
  3801. Return: CL = hardware underline status (see AX=CD07h)
  3802.     BL = foreground color for normal text
  3803.     BH = foreground color for bright text
  3804. Note:    only CL is valid on monochrome EGA systems
  3805. SeeAlso: AX=CD07h
  3806. ----------10CD10-----------------------------
  3807. INT 10 - VIDEO - UltraVision - LOAD USER FONT (EGA,VGA)
  3808.     AX = CD10h
  3809.     BH = bytes per character (08h,0Ah,0Bh,0Eh,13h,14h)
  3810.     CX = ABCDh load 9xN alternate font (v2+)
  3811.        else number of characters to load
  3812.         DX = character offset into font table
  3813.         DS:SI -> 8-byte ASCII font name
  3814.     ES:BP -> font definitions
  3815. Return: AX = FFFFh if invalid font parameters
  3816. Notes:    loads the designated characters into UltraVision's resident font area
  3817.     should be followed by a video mode set to reload character generator
  3818. SeeAlso: AX=1100h
  3819. ----------10CD-------------------------------
  3820. INT 10 - VIDEO - UltraVision - SET ULTRAVISION TEXT MODE (EGA,VGA)
  3821.     AH = CDh
  3822.     AL = text mode number (see AX=CD04h)
  3823. Return: AX = CDCDh if invalid mode
  3824. SeeAlso: AX=CD04h
  3825. ----------10EF-------------------------------
  3826. INT 10 - VIDEO - MSHERC.COM - INSTALLATION CHECK???
  3827.     AH = EFh
  3828. Return: DL = video adapter type
  3829.         00h original Hercules
  3830.         01h ???  \ one is probably Hercules Plus, the other
  3831.         02h ???  / Hercules InColor
  3832.         FFh non-Hercules 
  3833.     DH = memory mode byte
  3834.         01h "half" mode
  3835.         03h "full" mode
  3836. Note:    MSHERC.COM is a support program for the Microsoft Quick languages which
  3837.       makes their graphics libraries compatible with a Hercules card by
  3838.       adding video modes 08h and 88h, and supporting text in the new
  3839.       graphics modes.  While in mode 08h or 88h, INT 10 supports the
  3840.       Hercules card much like a CGA.
  3841. ----------10F0-------------------------------
  3842. INT 10 - EGA Register Interface Library - READ ONE REGISTER
  3843.     AH = F0h
  3844.     BL = register number
  3845.     BH = 00h
  3846.     DX = group index
  3847.         Pointer/data chips
  3848.            00h CRT Controller (25 reg) 3B4h mono modes, 3D4h color modes
  3849.            08h Sequencer (5 registers) 3C4h
  3850.            10h Graphics Controller (9 registers) 3CEh
  3851.            18h Attribute Controller (20 registers) 3C0h
  3852.         Single registers
  3853.            20h Miscellaneous Output register 3C2h
  3854.            28h Feature Control register (3BAh mono modes, 3DAh color modes)
  3855.            30h Graphics 1 Position register 3CCh
  3856.            38h Graphics 2 Position register 3CAh
  3857. Return: BL = data
  3858. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3859.       compatibility box, and others
  3860. SeeAlso: AH=F1h,AH=F2h,INT 2F/AX=BC00h
  3861. ----------10F1-------------------------------
  3862. INT 10 - EGA Register Interface Library - WRITE ONE REGISTER
  3863.     AH = F1h
  3864.     DX = group index (see AH=F0h)
  3865.         if single register:
  3866.         BL = value to write
  3867.         otherwise
  3868.         BL = register number
  3869.         BH = value to write
  3870. Return: BL = data
  3871. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3872.       compatibility box, and others
  3873. SeeAlso: AX=7F05h,AH=F0h,AH=F3h
  3874. ----------10F2-------------------------------
  3875. INT 10 - EGA Register Interface Library - READ REGISTER RANGE
  3876.     AH = F2h
  3877.     CH = starting register number
  3878.     CL = Number of registers (>1)
  3879.     DX = group index
  3880.          00h CRTC (3B4h mono modes, 3D4h color modes)
  3881.          08h Sequencer 3C4h
  3882.          10h Graphics Controller 3CEh
  3883.          18h Attribute Controller 3C0h
  3884.     ES:BX -> buffer, CL bytes
  3885. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3886.       compatibility box, and others
  3887. SeeAlso: AH=F0h,AH=F3h
  3888. ----------10F3-------------------------------
  3889. INT 10 - EGA Register Interface Library - WRITE REGISTER RANGE
  3890.     AH = F3h
  3891.     CH = starting register
  3892.     CL = number of registers (>1)
  3893.     DX = group index (see AH=F2h)
  3894.     ES:BX -> buffer, CL bytes
  3895. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3896.       compatibility box, and others
  3897. SeeAlso: AX=7F05h,AH=F1h,AH=F2h
  3898. ----------10F4-------------------------------
  3899. INT 10 - EGA Register Interface Library - READ REGISTER SET
  3900.     AH = F4h
  3901.     CX = number of registers to read (>1)
  3902.     ES:BX -> table of records (see below)
  3903. Return: register values in table filled in
  3904. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3905.       compatibility box, and others
  3906. SeeAlso: AH=F0h,AH=F2h,AH=F5h
  3907.  
  3908. Format of entries in table of register records:
  3909. Offset    Size    Description
  3910.  00h    WORD    group index
  3911.         Pointer/data chips
  3912.            00h CRTC (3B4h mono modes, 3D4h color modes)
  3913.            08h Sequencer 3C4h
  3914.            10h Graphics Controller 3CEh
  3915.            18h Attribute Controller 3C0h
  3916.         Single registers
  3917.            20h Miscellaneous Output register 3C2h
  3918.            28h Feature Control register (3BAh mono modes, 3DAh color)
  3919.            30h Graphics 1 Position register 3CCh
  3920.            38h Graphics 2 Position register 3CAh
  3921.  02h    BYTE    register number (0 for single registers)
  3922.  03h    BYTE    register value
  3923. ----------10F5-------------------------------
  3924. INT 10 - EGA Register Interface Library - WRITE REGISTER SET
  3925.     AH = F5h
  3926.     CX = number of registers to write (>1)
  3927.     ES:BX -> table of records (see AH=F4h)
  3928. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3929.       compatibility box, and others
  3930. SeeAlso: AX=7F05h,AH=F1h,AH=F3h,AH=F4h
  3931. ----------10F6------------------------------
  3932. INT 10 - EGA Register Interface Library - REVERT TO DEFAULT REGISTERS
  3933.     AH = F6h
  3934. Note:    provided by the Microsoft Mouse driver, OS/2 compatibility box, and
  3935.       others
  3936. SeeAlso: AH=F7h
  3937. ----------10F7------------------------------
  3938. INT 10 - EGA Register Interface Library - DEFINE DEFAULT REGISTER TABLE
  3939.     AH = F7h
  3940.     DX = port number
  3941.        Pointer/data chips
  3942.           00h CRTC (3B4h mono modes, 3D4h color modes)
  3943.           08h Sequencer 3C4h
  3944.           10h Graphics Controller 3CEh
  3945.           18h Attribute Controller 3C0h
  3946.        Single registers
  3947.           20h Miscellaneous Output register 3C2h
  3948.           28h Feature Control register (3BAh mono modes, 3DAh color modes)
  3949.           30h Graphics 1 Position register 3CCh
  3950.           38h Graphics 2 Position register 3CAh
  3951.     ES:BX -> table of one-byte entries, one byte to be written to each
  3952.          register
  3953. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3954.       compatibility box, and others
  3955. SeeAlso: AH=F6h
  3956. ----------10FA--BX0000----------------------
  3957. INT 10 - EGA Register Interface Library - INTERROGATE DRIVER
  3958.     AH = FAh
  3959.     BX = 0000h
  3960. Return: BX = 0000h if mouse driver not present
  3961.     ES:BX -> EGA Register Interface version number, if present:
  3962.         byte 0 = major release number
  3963.         byte 1 = minor release number
  3964. Note:    the RIL is provided by EGA.SYS, the Microsoft Mouse driver, the OS/2
  3965.       compatibility box, and others
  3966. SeeAlso: AH=F6h,INT 2F/AX=BC00h
  3967. ----------10FA------------------------------
  3968. INT 10 - FASTBUFF.COM - INSTALLATION CHECK
  3969.     AH = FAh
  3970. Return: AX = 00FAh if installed
  3971.         ES = segment of resident code
  3972. Program: FASTBUFF.COM is a keyboard speedup/screen blanking utility by David
  3973.       Steiner
  3974. ----------10FE------------------------------
  3975. INT 10 - TopView - GET SHADOW BUFFER
  3976.     AH = FEh
  3977.     ES:DI -> assumed video buffer
  3978.         B800h:0000h color text/CGA graphics, B000h:0000h mono text,
  3979.           or A000h:0000h EGA/VGA graphics (RSIS environments only)
  3980. Return: ES:DI -> actual video buffer for calling process
  3981. Notes:    if no multitasker or RSIS-compliant environment is installed, ES:DI is
  3982.       returned unchanged; RSIS is the Relocated Screen Interface
  3983.       Specification
  3984.     for display pages other than 0, use AH=05h and AH=0Fh to determine
  3985.       whether a particular page exists
  3986.     TopView requires a call to AH=FFh to notify it that the screen has
  3987.       changed; DESQview will check for changes itself until the first call
  3988.       to AH=FFh
  3989. SeeAlso: AH=05h,AX=5201h,AH=FFh,INT 15/AX=1024h,INT 21/AH=2Bh"DESQview"
  3990. SeeAlso: INT 21/AH=ECh"DoubleDOS"
  3991. ----------10FF-------------------------------
  3992. INT 10 - TopView - UPDATE SCREEN FROM SHADOW BUFFER
  3993.     AH = FFh
  3994.     CX = number of consecutive changed characters
  3995.     ES:DI -> first changed character in shadow buffer
  3996. Notes:    avoid CX=0000h
  3997.     DESQview will discontinue the automatic screen updating initiated by
  3998.       AH=FEh after this call
  3999.     not supported (ignored) by DESQview/X 1.0x
  4000. SeeAlso: AH=FEh
  4001. ----------10FF-------------------------------
  4002. INT 10 - DJ GO32.EXE 80386+ DOS extender - VIDEO EXTENSIONS
  4003.     AH = FFh
  4004.     AL = video mode
  4005.         00h 80x25 text
  4006.         01h default text
  4007.         02h CXxDX text
  4008.         03h biggest text
  4009.         04h 320x200 graphics
  4010.         05h default graphics
  4011.         06h CXxDX graphics
  4012.         07h    biggest non-interlaced graphics
  4013.         08h biggest graphics
  4014. SeeAlso: AH=00h,INT 21/AH=FFh"GO32"
  4015. ----------10FF00-----------------------------
  4016. INT 10 - CARBON COPY PLUS v5.0 - CHECK IF CC CONNECTED TO CCHELP
  4017.     AX = FF00h
  4018. Return: BL = 00h not connected
  4019.        = 01h connected
  4020. SeeAlso: AX=FF01h,AX=FF02h
  4021. ----------10FF01-----------------------------
  4022. INT 10 - CARBON COPY PLUS v5.0 - DISCONNECT AND RESET LINE
  4023.     AX = FF01h
  4024. SeeAlso: AX=FF00h,AX=FF02h
  4025. ----------10FF02-----------------------------
  4026. INT 10 - CARBON COPY PLUS v5.0 - GET LAST PHONE NUMBER DIALED
  4027.     AX = FF02h
  4028. Return: ES:DI -> ASCIZ phone number
  4029. SeeAlso: AX=FF00h,AX=FF01h
  4030. ----------11---------------------------------
  4031. INT 11 - CPU-generated (80486+) - ALIGNMENT CHECK
  4032.    Bit AC in the EFLAGS register enables this interrupt on a memory reference
  4033.      on a mis-aligned address when in privilege mode 3.
  4034. ----------11---------------------------------
  4035. INT 11 - BIOS - GET EQUIPMENT LIST
  4036. Return: AX = BIOS equipment list word
  4037.         bits
  4038.         0      floppy disk(s) installed (see bits 6-7)
  4039.         1      80x87 coprocessor installed
  4040.         2,3      number of 16K banks of RAM on motherboard (PC only)
  4041.           number of 64K banks of RAM on motherboard (XT only)
  4042.         2      pointing device installed (PS)
  4043.         3      unused (PS)
  4044.         4-5      initial video mode
  4045.           00 EGA, VGA, or PGA
  4046.           01 40x25 color
  4047.           10 80x25 color
  4048.           11 80x25 monochrome
  4049.         6-7      number of floppies installed less 1 (if bit 0 set)
  4050.         8      DMA support installed (PCjr, some Tandy 1000s, 1400LT)
  4051.         9-11  number of serial ports installed
  4052.         12      game port installed
  4053.         13      serial printer attached (PCjr)
  4054.           internal modem installed (PC/Convertible)
  4055.         14-15 number of parallel ports installed
  4056. ---Compaq and many other 386/486 machines--
  4057.     EAX bit 23: page tables set so that Weitek coprocessor addressable in
  4058.             real mode
  4059.         bit 24: Weitek math coprocessor present
  4060. ---Compaq Systempro
  4061.     EAX bit 25: internal DMA parallel port available
  4062.         26: IRQ for internal DMA parallel port (if bit 25 set)
  4063.             0 = IRQ5
  4064.             1 = IRQ7
  4065.          27,28: parallel port DMA channel
  4066.             00 DMA channel 0
  4067.             01 DMA channel 0 ???
  4068.             10 reserved
  4069.             11 DMA channel 3
  4070. SeeAlso: INT 12
  4071. ----------11----SI6A6A-----------------------
  4072. INT 11 - Columbia Data Products Standard Device Level Protocol (SDLP) 1.6
  4073.     SI = 6A6Ah
  4074.     AH = command (see below)
  4075.     AL = SCSI Addressing
  4076.         bits 2-0 SCSI Target LUN (logical unit number)
  4077.         bits 5-3 SCSI Target ID
  4078.         bits 7-6 Host Adapter
  4079. Return: CF clear if successful
  4080.     CF set on error
  4081.         AL = error code
  4082. SeeAlso: INT 21/AX=4402"ASPI"
  4083.  
  4084. Values for SDLP command:
  4085.  00h SDLP initialization
  4086.  01h SDLP System Identify
  4087.  02h simple read sectors
  4088.  03h simple write sectors
  4089.  04h simple verify sectors/seek to sector
  4090.  05h get device size/type
  4091.  06h ready unit
  4092.  07h format unit
  4093.  08h diagnostics
  4094.  09h rewind
  4095.  0Ah erase
  4096.  0Bh write filemarks
  4097.  0Ch space
  4098.  0Dh prevent/allow media removal
  4099.  0Eh load/unload media
  4100.  0Fh reserved - returns good status
  4101.  10h set block size
  4102.  11h write setmark
  4103.  12h set error level
  4104.  13h get address of Request Sense Buffer
  4105.  14h get SDLP error via Request Sense
  4106.  F0h Vendor Unique Function (WD7000-FASST2 only)
  4107.  FDh reset current SCSI HAC
  4108.  FEh get/set current SCSI HAC
  4109.  FFh execute SCSI command
  4110. ----------11BC--DX1954-----------------------
  4111. INT 11 - BNU FOSSIL - INSTALLATION CHECK
  4112.     AH = BCh
  4113.     DX = 1954h
  4114. Return: AX = 1954h
  4115.     ES:DX -> entry point of driver (instead of INT 14)
  4116. ----------11FF--SI6A6A-----------------------
  4117. INT 11 - WD7000 SDLP interface - EXECUTE GENERIC SCSI COMMAND
  4118.     AH = FFh
  4119.     SI = 6A6Ah
  4120.     AL = SCSI Addressing
  4121.         bits 2-0 SCSI Target LUN (logical unit number)
  4122.         bits 5-3 SCSI Target ID
  4123.         bit 7    write flag, set for write operations, clear otherwise
  4124.     CX = bytes of data to be transmitted (max FFF0h)
  4125.     DH = 00h
  4126.     DL = length of SCSI Command Descriptor Block
  4127.     DS:DI -> SCSI Command Descriptor Block
  4128.     ES:BX -> data buffer
  4129. Return: CF set on error
  4130.         AL = error code
  4131.     CF clear if successful
  4132. Note:    because of busmaster operations with WD7000FASST avoid accessing
  4133.       video memory directly; check 386 memory manager for VDS support.
  4134.       The WD7000XTAT works with programmed IO and does not have this
  4135.       limitation.
  4136. SeeAlso: INT 21/AX=4402"ASPI"
  4137. ----------11FFFECXFFFE-----------------------
  4138. INT 11 - BACK&FORTH (before v1.62) API
  4139.     AX = FFFEh
  4140.     CX = FFFEh
  4141.     BX = function
  4142.         00h installation check
  4143.         Return: AX = 0001h BNFHIGH and BNFLOW both loaded
  4144.                = 0003h only BNFHIGH loaded
  4145.                else neither loaded
  4146.         01h ???
  4147.         Return: DX:AX -> ???
  4148.         02h ???
  4149.         03h ???
  4150.         04h ???
  4151.         05h ??? switches current PSP segment and stack if BNFLOW has not
  4152.             yet announced itself installed
  4153.         06h ???
  4154.         Return: AX = ???
  4155. SeeAlso: INT 12/AX=FFFEh
  4156. ----------12---------------------------------
  4157. INT 12 - BIOS - GET MEMORY SIZE
  4158. Return:    AX = kilobytes of contiguous memory starting at absolute address 00000h
  4159. Note:    this call returns the contents of the word at 0040h:0013h; in PC and
  4160.       XT, this value is set from the switches on the motherboard
  4161. SeeAlso: INT 11,INT 2F/AX=4A06h
  4162. ----------12----CX1806-----------------------
  4163. INT 12 - KEYBUI v2.0+ - INSTALLATION CHECK
  4164.     CX = 1806h
  4165. Return:    AX = kilobytes of contiguous memory starting at absolute address 00000h
  4166.     CX = 1960h if installed
  4167. Note:    KEYBUI is a resident keyboard driver by Johan Zwiekhorst which allows
  4168.       accented characters and box drawing on standard QWERTY keyboards; it
  4169.       also provides break-to-DOS and screen blanking capabilities
  4170. ----------12----CX1807-----------------------
  4171. INT 12 - PARKER v2.0+ - INSTALLATION CHECK
  4172.     CX = 1807h
  4173. Return:    AX = kilobytes of contiguous memory starting at absolute address 00000h
  4174.     CX = 1961h if installed
  4175. Note:    PARKER is an optionally-resident hard disk parking program by Johan
  4176.       Zwiekhorst
  4177. ----------12FFFECXFFFE-----------------------
  4178. INT 12 - Back&Forth v1.62+ - API
  4179.     AX = FFFEh
  4180.     CX = FFFEh
  4181.     BX = function
  4182.         00h installation check
  4183.         Return: AX = 0001h installed
  4184.                  else  not loaded
  4185.         02h build program ID list
  4186.         ES:DI -> buffer of at least 100 bytes, to be filled with words
  4187.         Return: AX = number of programs defined
  4188.             ES:DI buffer filled with AX words
  4189.         03h switch to specified task (task need not be open yet)
  4190.         DX = two-letter program ID
  4191.         Return: AX = 0000h if task undefined
  4192.         04h ???
  4193.         05h    ???
  4194.         06h    get version (undoc)
  4195.         Return: AX = version * 100 (v1.71 = 00ABh)
  4196.         07h ???
  4197.         08h get open tasks (undoc)
  4198.         ES:DI -> task info buffer (see below)
  4199.         Return: AX = number of open tasks (max 20)
  4200.         09h    ???
  4201. Note:    Back & Forth is a task switcher by Progressive Solutions, Inc.
  4202. SeeAlso: INT 11/AX=FFFEh
  4203.  
  4204. Format of task info buffer:
  4205. Offset    Size    Description
  4206.  00h 21 BYTEs    ASCIZ task name
  4207.  15h    BYTE    hotkey shift state (as for INT 16/AH=02h)
  4208.  16h    WORD    hotkey scan code
  4209.  18h    WORD    program ID
  4210. ----------1300-------------------------------
  4211. INT 13 - DISK - RESET DISK SYSTEM
  4212.     AH = 00h
  4213.     DL = drive (if bit 7 is set both hard disks and floppy disks reset)
  4214. Return: AH = status (see AH=01h)
  4215.     CF clear if successful (returned AH=00h)
  4216.     CF set on error
  4217. Note:    forces controller to recalibrate drive heads (seek to track 0)
  4218. SeeAlso: AH=0Dh,AH=11h,INT 21/AH=0Dh,INT 4E"TI Professional"
  4219. ----------1301-------------------------------
  4220. INT 13 - DISK - GET STATUS OF LAST OPERATION
  4221.     AH = 01h
  4222.     DL = drive (bit 7 set for hard disk)
  4223. Return: CF clear if successful (returned status 00h)
  4224.     CF set on error
  4225.     AH = status of previous operation
  4226.         00h successful completion
  4227.         01h invalid function in AH or invalid parameter
  4228.         02h address mark not found
  4229.         03h disk write-protected (floppy)
  4230.         04h sector not found
  4231.         05h reset failed (hard disk)
  4232.         06h disk changed (floppy)
  4233.         07h drive parameter activity failed (hard disk)
  4234.         08h DMA overrun
  4235.         09h attempted DMA across 64K boundary
  4236.         0Ah bad sector detected (hard disk)
  4237.         0Bh bad track detected (hard disk)
  4238.         0Ch unsupported track or invalid media
  4239.         0Dh invalid number of sectors on format (hard disk)
  4240.         0Eh control data address mark detected (hard disk)
  4241.         0Fh DMA arbitration level out of range (hard disk)
  4242.         10h uncorrectable CRC or ECC error on read
  4243.         11h data ECC corrected (hard disk)
  4244.         20h controller failure
  4245.         40h seek failed
  4246.         80h timeout (not ready)
  4247.         AAh drive not ready (hard disk)
  4248.         BBh undefined error (hard disk)
  4249.         CCh write fault (hard disk)
  4250.         E0h status register error (hard disk)
  4251.         FFh sense operation failed (hard disk)
  4252. Note:    some BIOSes return the status in AL; the PS/2 Model 30/286 returns the
  4253.       status in both AH and AL
  4254. ----------1302-------------------------------
  4255. INT 13 - DISK - READ SECTOR(S) INTO MEMORY
  4256.     AH = 02h
  4257.     AL = number of sectors to read (must be nonzero)
  4258.     CH = low eight bits of cylinder number
  4259.     CL = sector number (bits 0-5)
  4260.          high two bits of cylinder (bits 6-7, hard disk only)
  4261.     DH = head number
  4262.     DL = drive number (bit 7 set for hard disk)
  4263.     ES:BX -> data buffer
  4264. Return: CF set on error
  4265.         if AH = 11h (corrected ECC error), AL = burst length
  4266.     CF clear if successful
  4267.     AH = status (see AH=01h)
  4268.     AL = number of sectors transferred
  4269. Notes:    errors on a floppy may be due to the motor failing to spin up quickly
  4270.       enough; the read should be retried at least three times, resetting
  4271.       the disk with AH=00h between attempts
  4272.     AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4273.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4274. SeeAlso: AH=03h,AH=0Ah
  4275. ----------1303-------------------------------
  4276. INT 13 - DISK - WRITE DISK SECTOR(S)
  4277.     AH = 03h
  4278.     AL = number of sectors to write (must be nonzero)
  4279.     CH = low eight bits of cylinder number
  4280.     CL = sector number (bits 0-5)
  4281.          high two bits of cylinder (bits 6-7, hard disk only)
  4282.     DH = head number
  4283.     DL = drive number (bit 7 set for hard disk)
  4284.     ES:BX -> data buffer
  4285. Return: CF set on error
  4286.     CF clear if successful
  4287.     AH = status (see AH=01h)
  4288.     AL = number of sectors transferred
  4289. Notes:    errors on a floppy may be due to the motor failing to spin up quickly
  4290.       enough; the write should be retried at least three times, resetting
  4291.       the disk with AH=00h between attempts
  4292.     AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4293.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4294. SeeAlso: AH=02h,AH=0Bh
  4295. ----------1304-------------------------------
  4296. INT 13 - DISK - VERIFY DISK SECTOR(S)
  4297.     AH = 04h
  4298.     AL = number of sectors to verify (must be nonzero)
  4299.     CH = low eight bits of cylinder number
  4300.     CL = sector number (bits 0-5)
  4301.          high two bits of cylinder (bits 6-7, hard disk only)
  4302.     DH = head number
  4303.     DL = drive number (bit 7 set for hard disk)
  4304.     ES:BX -> data buffer (PC,XT,AT with BIOS prior to 11/15/85)
  4305. Return: CF set on error
  4306.     CF clear if successful
  4307.     AH = status (see AH=01h)
  4308.     AL = number of sectors verified
  4309. Notes:    errors on a floppy may be due to the motor failing to spin up quickly
  4310.       enough; the write should be retried at least three times, resetting
  4311.       the disk with AH=00h between attempts
  4312.     this function does not compare the disk with memory, it merely
  4313.       checks whether the sector's stored CRC matches the data's actual CRC
  4314.     AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4315.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4316. SeeAlso: AH=02h
  4317. ----------1305-------------------------------
  4318. INT 13 - FLOPPY - FORMAT TRACK
  4319.     AH = 05h
  4320.     AL = number of sectors to format
  4321.     CH = track number
  4322.     DH = head number
  4323.     DL = drive number
  4324.     ES:BX -> address field buffer (see below)
  4325. Return: CF set on error
  4326.     CF clear if successful
  4327.     AH = status (see AH=01h)
  4328. Notes:    on AT or higher, call AH=17h first
  4329.     the number of sectors per track is read from the diskette parameter
  4330.       table pointed at by INT 1E
  4331. SeeAlso: AH=05h"FIXED",AH=17h,AH=18h,INT 1E
  4332.  
  4333. Format of address field buffer entry (one per sector in track):
  4334. Offset    Size    Description
  4335.  00h    BYTE    track number
  4336.  01h    BYTE    head number (0-based)
  4337.  02h    BYTE    sector number
  4338.  03h    BYTE    sector size (00h=128 bytes, 01h=256 bytes, 02h=512, 03h=1024)
  4339. ----------1305-------------------------------
  4340. INT 13 - FIXED DISK - FORMAT TRACK
  4341.     AH = 05h
  4342.     AL = interleave value (XT-type controllers only)
  4343.     ES:BX -> 512-byte format buffer
  4344.         the first 2*(sectors/track) bytes contain F,N for each sector
  4345.            F = 00h for good sector, 80h for bad sector
  4346.            N = sector number
  4347.     CH = cylinder number (bits 8,9 in high bits of CL)
  4348.     CL = high bits of cylinder number (bits 7,6)
  4349.     DH = head
  4350.     DL = drive
  4351. Return: AH = status code (see AH=01h)
  4352. Notes:    AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4353.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4354.     for XT-type controllers on an AT or higher, AH=0Fh should be called
  4355.       first
  4356. SeeAlso: AH=05h"FLOPPY",AH=06h"FIXED",AH=07h"FIXED",AH=0Fh,AH=18h,AH=1Ah
  4357. ----------1305-------------------------------
  4358. INT 13 - Future Domain SCSI BIOS - SEND SCSI MODE SELECT COMMAND
  4359.     AH = 05h
  4360.     DL = hard drive ID
  4361.     ES:BX -> mode select data (see below)
  4362. Return: CF set on error
  4363.     AH = status code (see AH=01h)
  4364. Notes:    this function can be called before AH=07h"SCSI" or AH=06h"SCSI" to 
  4365.       format a SCSI disk with the desired parameters
  4366.     the mode select data below is from the SCSI-1 specification
  4367. SeeAlso: AH=06h"SCSI",AH=07h"SCSI"
  4368.  
  4369. Format of mode select data:
  4370. Offset    Size    Description
  4371.  00h    BYTE    number of bytes of remaining data (12 + vendor unique length)
  4372.  01h    BYTE    reserved (0)
  4373.  02h    BYTE    medium type (0 for hard disk)
  4374.  03h    BYTE    reserved (0)
  4375.  04h    BYTE    block descriptor length (8)
  4376.  05h    BYTE    density code (0 for hard disk)
  4377.  06h  3 BYTEs    number of blocks (big-endian) (000000h for entire disk)
  4378.  09h    BYTE    reserved (0)
  4379.  0Ah  3 BYTEs    block length (big-endian) (512 standard, or 256)
  4380.  0Dh    ???    vendor-specific parameter bytes (optional)
  4381. ----------1306-------------------------------
  4382. INT 13 - FIXED DISK - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT,PORT)
  4383.     AH = 06h
  4384.     AL = interleave value
  4385.     CH = cylinder number (bits 8,9 in high bits of CL)
  4386.     CL = sector number
  4387.     DH = head
  4388.     DL = drive
  4389. Return: AH = status code (see AH=01h)
  4390. Note:    AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4391.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4392. SeeAlso: AH=05h"FIXED",AH=07h"FIXED"
  4393. ----------1306-------------------------------
  4394. INT 13 - Future Domain SCSI BIOS - FORMAT DRIVE WITH BAD SECTOR MAPPING
  4395.     AH = 06h
  4396.     AL = interleave
  4397.          (0 = default, 1 = consecutive sectors, 2 - 255 = vendor unique)
  4398.     DL = hard drive ID
  4399.     DH = bits 7-5 drive LUN
  4400.          bit 4    defect list is available
  4401.          bit 3    defect list is complete (erase drive's defect list)
  4402.          bits 2-0 defect table format
  4403.               (000=use defect table A, 100=use defect table B,
  4404.               101=use defect table C)
  4405.     ES:BX ->  defect table A, B or C (see below)
  4406. Return: CF set on error
  4407.     AH = status code (see AH=01h)
  4408. Notes:    block addresses must be in ascending order (for table B, cylinder is
  4409.       most significant, byte from index least significant; for table C,
  4410.       cylinder is most significant, sector number least significant)
  4411.     table B defect bytes from index of FFFFFFFFh indicates that the entire
  4412.       track shall be reassigned
  4413.     table C defect sector number of FFFFFFFFh indicates that the entire
  4414.       track shall be reassigned
  4415. SeeAlso: AH=05h"SCSI",AH=06h"FIXED",AH=07h"SCSI"
  4416.  
  4417. Format of defect table A:
  4418. Offset    Size    Description
  4419.  00h    WORD    number of bytes remaining in table
  4420.  02h    BYTE    reserved (0)
  4421.  03h    BYTE    reserved (0)
  4422.  04h    WORD    defect list length (big-endian) (4*number of defects)
  4423.  06h  4 DWORDs    defect block addresses (big-endian)
  4424.  
  4425. Format of defect table B:
  4426. Offset    Size    Description
  4427.  00h    WORD    number of bytes remaining in table
  4428.  02h    BYTE    reserved (0)
  4429.  03h    BYTE    reserved (0)
  4430.  04h    WORD    defect list length (big-endian) (8*number of defects)
  4431.  06h 8N BYTEs    Defect List [array]
  4432.     Offset    Size    Description
  4433.      00h  3 BYTEs    cylinder number of defect (big-endian)
  4434.      03h    BYTE    head number of defect
  4435.      04h    DWORD    defect bytes from index (big-endian)
  4436.  
  4437. Format of defect table C:
  4438. Offset    Size    Description
  4439.  00h    WORD    number of bytes remaining in table
  4440.  02h    BYTE    reserved (0)
  4441.  03h    BYTE    reserved (0)
  4442.  04h    WORD    defect list length (big-endian) (8*number of defects)
  4443.  06h 8N BYTEs    defect list
  4444.     Offset    Size    Description
  4445.      00h  3 BYTEs    cylinder number of defect (big-endian)
  4446.      03h    BYTE    head number of defect
  4447.      04h    DWORD    defect sector number (big-endian)
  4448. ----------1307-------------------------------
  4449. INT 13 - FIXED DISK - FORMAT DRIVE STARTING AT GIVEN TRACK (XT,PORT)
  4450.     AH = 07h
  4451.     AL = interleave value (XT only)
  4452.     ES:BX = 512-byte format buffer (see AH=05h)
  4453.     CH = cylinder number (bits 8,9 in high bits of CL)
  4454.     CL = sector number
  4455.     DH = head
  4456.     DL = drive
  4457. Return: AH = status code (see AH=01h)
  4458. Note:    AWARD AT BIOS extended to handle more than 1024 cylinders by placing
  4459.       bits 10 and 11 of the cylinder number into bits 6 and 7 of DH
  4460. SeeAlso: AH=05h"FIXED",AH=06h"FIXED",AH=1Ah
  4461. ----------1307-------------------------------
  4462. INT 13 - Future Domain SCSI BIOS - FORMAT DRIVE
  4463.     AH = 07h
  4464.     AL = interleave (0 = default, 1 = consecutive sectors, 
  4465.            2 - 255 = vendor unique)
  4466.     DL = hard drive ID
  4467. Return: CF set on error
  4468.     AH = status code (see AH=01h)
  4469. SeeAlso: AH=05h"SCSI",AH=06h"SCSI",AH=07h"FIXED"
  4470. ----------1308-------------------------------
  4471. INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI)
  4472.     AH = 08h
  4473.     DL = drive (bit 7 set for hard disk)
  4474. Return: CF set on error
  4475.         AH = status (07h) (see AH=01h)
  4476.     CF clear if successful
  4477.         AH = 00h
  4478.         BL = drive type (AT/PS2 floppies only)
  4479.         01h 360K
  4480.         02h 1.2M
  4481.         03h 720K
  4482.         04h 1.44M
  4483.         06h ??? (checked by 386MAX v6.01)
  4484.         CH = low eight bits of maximum cylinder number
  4485.         CL = maximum sector number (bits 5-0)
  4486.          high two bits of maximum cylinder number (bits 7-6)
  4487.         DH = maximum head number
  4488.         DL = number of drives
  4489.         ES:DI -> drive parameter table (floppies only)
  4490. Notes:    may return successful even though specified drive is greater than the
  4491.       number of attached drives of that type (floppy/hard); check DL to
  4492.       ensure validity
  4493.     for systems predating the IBM AT, this call is only valid for hard
  4494.       disks, as it is implemented by the hard disk BIOS rather than the
  4495.       ROM BIOS
  4496.     Toshiba laptops with HardRAM return DL=02h when called with DL=80h,
  4497.       but fail on DL=81h.  The BIOS data at 40h:75h correctly reports 01h.
  4498. SeeAlso: AH=15h,INT 1E,INT 41
  4499. ----------1309-------------------------------
  4500. INT 13 - HARD DISK - INITIALIZE CONTROLLER WITH DRIVE PARAMETERS (AT,PS)
  4501.     AH = 09h
  4502.     DL = drive (80h for first, 81h for second)
  4503. Return: CF clear if successful
  4504.     CF set on error
  4505.     AH = status (see AH=01h)
  4506. Notes:    on the PC and XT, this function uses the parameter table pointed at by
  4507.       INT 41
  4508.     on the AT and later, this function uses the parameter table pointed at
  4509.       by INT 41 if DL=80h, and the parameter table pointed at by INT 46 if
  4510.       DL=81h
  4511. SeeAlso: INT 41,INT 46
  4512. ----------130A-------------------------------
  4513. INT 13 - HARD DISK - READ LONG SECTOR(S) (AT and later)
  4514.     AH = 0Ah
  4515.     AL = number of sectors
  4516.     CH = low eight bits of cylinder number
  4517.     CL = sector number (bits 5-0)
  4518.          high two bits of cylinder number (bits 7-6)
  4519.     DH = head number
  4520.     DL = drive number (80h = first, 81h = second)
  4521.     ES:BX -> data buffer
  4522. Return: CF clear if successful
  4523.     CF set on error
  4524.     AH = status (see AH=01h)
  4525.     AL = number of sectors transferred
  4526. Notes:    this function reads in four to seven bytes of error-correcting code
  4527.       along with each sector's worth of information
  4528.     data errors are not automatically corrected, and the read is aborted
  4529.       after the first sector with an ECC error
  4530.     used for diagnostics only on PS/2 systems
  4531. SeeAlso: AH=02h,AH=0Bh
  4532. ----------130B-------------------------------
  4533. INT 13 - HARD DISK - WRITE LONG SECTOR(S) (AT and later)
  4534.     AH = 0Bh
  4535.     AL = number of sectors
  4536.     CH = low eight bits of cylinder number
  4537.     CL = sector number (bits 5-0)
  4538.          high two bits of cylinder number (bits 7-6)
  4539.     DH = head number
  4540.     DL = drive number (80h = first, 81h = second)
  4541.     ES:BX -> data buffer
  4542. Return: CF clear if successful
  4543.     CF set on error
  4544.     AH = status (see AH=01h)
  4545.     AL = number of sectors transferred
  4546. Notes:    each sector's worth of data must be followed by four to seven bytes of
  4547.       error-correction information
  4548.     used for diagnostics only on PS/2 systems
  4549. SeeAlso: AH=03h,AH=0Ah
  4550. ----------130C-------------------------------
  4551. INT 13 - HARD DISK - SEEK TO CYLINDER
  4552.     AH = 0Ch
  4553.     CH = low eight bits of cylinder number
  4554.     CL = sector number (bits 5-0)
  4555.          high two bits of cylinder number (bits 7-6)
  4556.     DH = head number
  4557.     DL = drive number (80h = first, 81h = second hard disk)
  4558. Return: CF set on error
  4559.     CF clear if successful
  4560.     AH = status (see AH=01h)
  4561. SeeAlso: AH=00h,AH=02h,AH=0Ah
  4562. ----------130D-------------------------------
  4563. INT 13 - HARD DISK - RESET HARD DISKS
  4564.     AH = 0Dh
  4565.     DL = drive number (80h = first, 81h = second hard disk)
  4566. Return: CF set on error
  4567.     CF clear if successful
  4568.     AH = status (see AH=01h)
  4569. Notes:    reinitializes the hard disk controller, resets the specified drive's
  4570.       parameters, and recalibrates the drive's heads (seek to track 0)
  4571.     not for PS/2 ESDI drives
  4572. SeeAlso: AH=00h,INT 21/AH=0Dh
  4573. ----------130E-------------------------------
  4574. INT 13 - HARD DISK - READ SECTOR BUFFER (XT only)
  4575.     AH = 0Eh
  4576.     DL = drive number (80h = first, 81h = second hard disk)
  4577.     ES:BX -> buffer
  4578. Return: CF set on error
  4579.     CF clear if successful
  4580.     AH = status code (see AH=01h)
  4581. Notes:    transfers controller's sector buffer.  No data is read from the drive
  4582.     used for diagnostics only on PS/2 systems
  4583. SeeAlso: AH=0Ah
  4584. ----------130F-------------------------------
  4585. INT 13 - HARD DISK - WRITE SECTOR BUFFER (XT only)
  4586.     AH = 0Fh
  4587.     DL = drive number (80h = first, 81h = second hard disk)
  4588.     ES:BX -> buffer
  4589. Return: CF set on error
  4590.     CF clear if successful
  4591.     AH = status code (see AH=01h)
  4592. Notes:    does not write data to the drive
  4593.     should be called before formatting to initialize an XT-type
  4594.       controller's sector buffer
  4595.     used for diagnostics only on PS/2 systems
  4596. SeeAlso: AH=0Bh
  4597. ----------1310-------------------------------
  4598. INT 13 - HARD DISK - CHECK IF DRIVE READY
  4599.     AH = 10h
  4600.     DL = drive number (80h = first, 81h = second hard disk)
  4601. Return: CF set on error
  4602.     CF clear if successful
  4603.     AH = status (see AH=01h)
  4604. ----------1311-------------------------------
  4605. INT 13 - HARD DISK - RECALIBRATE DRIVE
  4606.     AH = 11h
  4607.     DL = drive number (80h = first, 81h = second hard disk)
  4608. Return:    CF set on error
  4609.     CF clear if successful
  4610.     AH = status (see AH=01h)
  4611. Note:    causes hard disk controller to seek the specified drive to cylinder 0
  4612. SeeAlso: AH=00h,AH=0Ch,AH=19h"FIXED DISK"
  4613. ----------1312-------------------------------
  4614. INT 13 - HARD DISK - CONTROLLER RAM DIAGNOSTIC (XT,PS)
  4615.     AH = 12h
  4616.     DL = drive number (80h = first, 81h = second hard disk)
  4617. Return: CF set on error
  4618.     CF clear if successful
  4619.     AH = status code (see AH=01h)
  4620. SeeAlso: AH=13h,AH=14h
  4621. ----------1312-------------------------------
  4622. INT 13 - Future Domain SCSI CONTROLLER - STOP SCSI DISK
  4623.     AH = 12h
  4624.     DL = hard drive ID
  4625. Return: CF set on error
  4626.     AH = status code (see AH=01h)
  4627. Notes:    available at least on the TMC-870 8-bit SCSI controller BIOS v6.0A
  4628.     if the given drive is a SCSI device, the SCSI Stop Unit command is sent
  4629.       and either "Disk prepared for shipping" or "Disk Stop command failed"
  4630.       is displayed
  4631. ----------1313-------------------------------
  4632. INT 13 - HARD DISK - DRIVE DIAGNOSTIC (XT,PS)
  4633.     AH = 13h
  4634.     DL = drive number (80h = first, 81h = second hard disk)
  4635. Return: CF set on error
  4636.     CF clear if successful
  4637.     AH = status code (see AH=01h)
  4638. SeeAlso: AH=12h,AH=14h
  4639. ----------1314-------------------------------
  4640. INT 13 - HARD DISK - CONTROLLER INTERNAL DIAGNOSTIC
  4641.     AH = 14h
  4642. Return: CF set on error
  4643.     CF clear if successful
  4644.     AH = status code (see AH=01h)
  4645. SeeAlso: AH=12h,AH=13h
  4646. ----------1315-------------------------------
  4647. INT 13 - DISK - GET DISK TYPE (XT 1/10/86 or later,XT286,AT,PS)
  4648.     AH = 15h
  4649.     DL = drive number (bit 7 set for hard disk)
  4650. Return:    CF clear if successful
  4651.         AH = type code
  4652.         00h no such drive
  4653.         01h floppy without change-line support
  4654.         02h floppy with change-line support
  4655.         03h hard disk
  4656.             CX:DX = number of 512-byte sectors
  4657.     CF set on error
  4658.         AH = status (see AH=01h)
  4659. SeeAlso: AH=08h,AH=16h,AH=17h,AH=19h"SCSI"
  4660. ----------1316-------------------------------
  4661. INT 13 - FLOPPY DISK - DETECT DISK CHANGE (XT 1/10/86 or later,XT286,AT,PS)
  4662.     AH = 16h
  4663.     DL = drive number
  4664. Return: CF clear if change line inactive
  4665.         AH = 00h (disk not changed)
  4666.     CF set if change line active
  4667.         AH = 06h change line active or not supported
  4668.            = 80h drive not ready or not present
  4669. Note:    call AH=15h first to determine whether the drive supports a change
  4670.       line
  4671. SeeAlso: AH=15h
  4672. ----------1317-------------------------------
  4673. INT 13 - FLOPPY DISK - SET DISK TYPE FOR FORMAT (AT,PS)
  4674.     AH = 17h
  4675.     AL = format type
  4676.         01h = 320/360K disk in 360K drive
  4677.         02h = 320/360K disk in 1.2M drive
  4678.         03h = 1.2M disk in 1.2M drive
  4679.         04h = 720K disk in 720K drive
  4680.     DL = drive number
  4681. Return: CF set on error
  4682.     CF clear if successful
  4683.     AH = status (see AH=01h)
  4684. Note:    this function does not handle 1.44M drives; use AH=18h instead
  4685. SeeAlso: AH=15h,AH=18h
  4686. ----------1318-------------------------------
  4687. INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)
  4688.     AH = 18h
  4689.     DL = drive number
  4690.     CH = lower 8 bits of highest cylinder number (number of cylinders - 1)
  4691.     CL = sectors per track (bits 0-5)
  4692.          top 2 bits of highest cylinder number (bits 6,7)
  4693. Return: AH = status
  4694.         00h requested combination supported
  4695.         01h function not available
  4696.         0Ch not supported or drive type unknown
  4697.         80h there is no disk in the drive
  4698.     ES:DI -> 11-byte parameter table
  4699. SeeAlso: AH=05h,AH=07h,AH=17h
  4700. ----------1318-------------------------------
  4701. INT 13 - Future Domain SCSI BIOS - GET SCSI CONTROLLER INFORMATION
  4702.     AH = 18h
  4703.     DL = hard drive ID
  4704. Return: CF set on error
  4705.         AH = status code (see AH=01h)
  4706.     CF clear if successful
  4707.         AX = 4321h (magic number)
  4708.         CX = controller family code
  4709.         0203h TMC-1650/1660/1670/1680 (ROM 2.0)
  4710.             BH = number of exclusively ROM-controlled SCSI devices
  4711.             BL = canonical SCSI device number for specified drive
  4712.         040Ah TMC-820/830/840/850/860/870/875/880/885 (ROM <= 6.0A)
  4713.             BH = number of exclusively ROM-controlled SCSI devices
  4714.             BL = canonical SCSI device number for specified drive
  4715.         050Dh TMC-840/841/880/881 (ROM 5.2D)
  4716.             BH = number of exclusively ROM-controlled SCSI devices
  4717.             BL = canonical SCSI device number for specified drive
  4718.         0700h TMC-830/850/860/875/885 (ROM 7.0)
  4719.             DH = number of exclusively ROM-controlled SCSI devices
  4720.             DL = canonical SCSI device number for specified drive
  4721. Note:    also sets an internal flag (non-resettable) which prevents some
  4722.       controller messages from being displayed, allows writes to
  4723.       removable devices (use caution!), and enables the INT 13 interface
  4724.       for more than one drive (i.e. DL >= 81h) in at least some ROM
  4725.       versions
  4726. SeeAlso: AH=05h"SCSI",AH=1Bh"SCSI"
  4727. ----------1319-------------------------------
  4728. INT 13 - FIXED DISK - PARK HEADS (XT286,PS)
  4729.     AH = 19h
  4730.     DL = drive
  4731. Return: CF set on error
  4732.     AH = status (see AH=01h)
  4733. SeeAlso: AH=11h
  4734. ----------1319-------------------------------
  4735. INT 13 - Future Domain SCSI CONTROLLER - REINITIALIZE DRIVE
  4736.     AH = 19h
  4737.     DL = hard drive ID
  4738. Return: CF set on error
  4739.         AH = status code (see AH=01h)
  4740.     CF clear if successful
  4741.         AH = disk type (03h = fixed disk)
  4742.         CX:DX = number of 512-byte sectors
  4743. Notes:    sends SCSI Read Capacity command to get number of logical blocks and
  4744.       adjusts the result for 512-byte sectors
  4745.     displays either "Error in Read Capacity Command" or "nnn Bytes per
  4746.       sector" (nnn=256 or 512, the only sizes supported in the translation
  4747.       code)
  4748.     should probably be called when a removable device has its media changed
  4749.     returns the same values as AH=15h
  4750. SeeAlso: AH=15h,AH=1Ah
  4751. ----------131A-------------------------------
  4752. INT 13 - ESDI FIXED DISK - FORMAT UNIT (PS)
  4753.     AH = 1Ah
  4754.     AL = defect table count
  4755.     CL = format modifiers
  4756.         bit 4: generate periodic interrupt
  4757.         bit 3: perform surface analysis
  4758.         bit 2: update secondary defect map
  4759.         bit 1: ignore secondary defect map
  4760.         bit 0: ignore primary defect map
  4761.     DL = drive
  4762.     ES:BX -> defect table
  4763. Return: CF set on error
  4764.     AH = status (see AH=01h)
  4765. Note:    if periodic interrupt selected, INT 15/AH=0Fh is called after each
  4766.       cylinder is formatted
  4767. SeeAlso: AH=07h,INT 15/AH=0Fh
  4768. ----------131A-------------------------------
  4769. INT 13 - Future Domain SCSI CONTROLLER - GET SCSI PARTIAL MEDIUM CAPACITY
  4770.     AH = 1Ah
  4771.     CH = track (bits 8,9 in high bits of CL)
  4772.     CL = sector (01h to number of sectors/track for drive)
  4773.     DH = head
  4774.     DL = hard drive ID
  4775. Return: CF set on error
  4776.     AH = status code (see AH=01h)
  4777.     CX:DX = logical block number of last quickly-accessible block after
  4778.         given block
  4779. Note:    sends SCSI Read Capacity command with the PMI bit set to obtain the
  4780.       logical block address of the last block after which a substantial
  4781.       delay in data transfer will be encountered (usually the last block
  4782.       on the current cylinder).  No translation to 512 byte sectors is
  4783.       performed on the result if data is stored on the disk in other than
  4784.       512 byte sectors.
  4785. SeeAlso: AH=15h,AH=19h"SCSI"
  4786. ----------131B-------------------------------
  4787. INT 13 - ESDI FIXED DISK - GET MANUFACTURING HEADER
  4788.     AH = 1Bh
  4789.     AL = number of record
  4790.     DL = drive
  4791.     ES:BX -> buffer for manufacturing header (defect list)
  4792. Return: CF set on error
  4793.         AH = status
  4794. Note:    manufacturing header format (Defect Map Record format) can be found
  4795.       in IBM 70MB, 115MB Fixed Disk Drives Technical Reference
  4796. ----------131B-------------------------------
  4797. INT 13 - Future Domain SCSI CONTROLLER - GET POINTER TO SCSI DISK INFO BLOCK
  4798.     AH = 1Bh
  4799.     DL = hard drive ID
  4800. Return: CF set on error
  4801.         AH = status code (see AH=01h)
  4802.     CF clear if successful
  4803.         ES:BX -> SCSI disk information block
  4804. Note:    also sets a non-resettable flag which prevents some controller messages
  4805.       from being displayed
  4806. SeeAlso: AH=18h"SCSI",AH=1Ch"SCSI"
  4807.  
  4808. Format of SCSI disk information block:
  4809. Offset    Size    Description
  4810.  00h    BYTE    drive physical information
  4811.         bit 0: ???
  4812.         bit 1: device uses parity
  4813.         bit 2: 256 bytes per sector instead of 512
  4814.         bit 3: don't have capacity yet???
  4815.         bit 4: disk is removable
  4816.         bit 5: logical unit number is not present
  4817.  01h    WORD    translated number of cylinders
  4818.  03h    BYTE    translated number of heads
  4819.  04h    BYTE    translated number of sectors per track (17, 34, or 63)
  4820.  05h    BYTE    drive address
  4821.         bits 0-2: logical unit number
  4822.         bits 3-5: device number
  4823.  06h    BYTE    01h at initialization
  4824.  07h    BYTE    sense code byte 00h, or extended sense code byte 0Ch
  4825.  08h    BYTE    00h
  4826.  09h    BYTE    00h or extended sense code byte 02h (sense key)
  4827.  0Ah    BYTE    00h
  4828.  0Bh 10 BYTEs    copy of Command Descriptor Block (CDB)
  4829.  15h    DWORD    translated number of sectors on device
  4830. ----------131C-------------------------------
  4831. INT 13 - Future Domain SCSI CONTROLLER - GET POINTER TO FREE CONTROLLER RAM
  4832.     AH = 1Ch
  4833.     DL = hard drive ID (any valid SCSI hard disk)
  4834. Return: CF set on error
  4835.         AH = status code (see AH=01h)
  4836.     CF clear if successful
  4837.         ES:BX -> first byte of free RAM on controller
  4838. Notes:    the Future Domain TMC-870 contains 1024 bytes of RAM at offsets 1800h
  4839.       to 1BFFh on-bard the controller for storing drive information and
  4840.       controller status; ES:BX points to the first byte available for other
  4841.       uses
  4842.     ES contains the segment at which the controller resides; the
  4843.       controller's two memory-mapped I/O ports are at offsets 1C00h, 1E00h
  4844. SeeAlso: AH=1Bh"SCSI"
  4845. ----------131C0A-----------------------------
  4846. INT 13 - ESDI FIXED DISK - GET DEVICE CONFIGURATION
  4847.     AX = 1C0Ah
  4848.     DL = drive
  4849.     ES:BX -> buffer for device configuration (drive physical parameter)
  4850. Return: CF set on error
  4851.         AH = status
  4852. Note:    device configuration format can be found in IBM ESDI Fixed Disk Drive
  4853.       Adapter/A Technical Reference
  4854. ----------131C0B-----------------------------
  4855. INT 13 - ESDI FIXED DISK - GET ADAPTER CONFIGURATION
  4856.     AX = 1C0Bh
  4857.     ES:BX -> buffer for adapter configuration
  4858. Return: CF set on error
  4859.         AH = status
  4860. SeeAlso: AX=1C0Ch
  4861. ----------131C0C-----------------------------
  4862. INT 13 - ESDI FIXED DISK - GET POS INFORMATION
  4863.     AX = 1C0Ch
  4864.     ES:BX -> POS information
  4865. Return: CF set on error
  4866.         AH = status
  4867. SeeAlso: AX=1C0Bh
  4868. ----------131C0E-----------------------------
  4869. INT 13 - ESDI FIXED DISK - TRANSLATE RBA TO ABA
  4870.     AX = 1C0Eh
  4871.     CH = low 8 bits of cylinder number
  4872.     CL = sector number, high two bits of cylinder number in bits 6 and 7
  4873.     DH = head number
  4874.     DL = drive number
  4875.     ES:BX -> ABA number
  4876. Return: CF set on error
  4877.         AH = status
  4878. Note:    ABA (absolute block address) format can be found in IBM ESDI Adapter
  4879.       Technical Reference by using its Device Configuration Status Block
  4880. ----------131D-------------------------------
  4881. INT 13 - IBMCACHE.SYS - CACHE STATUS
  4882.     AH = 1Dh
  4883.     AL = subfunction
  4884.         01h get status record
  4885.         DL = drive???
  4886.         Return: ES:BX -> status record
  4887.             CF set on error
  4888.                 AH = error code
  4889.         02h set cache status
  4890.         ES:BX -> status record
  4891.         DL = drive???
  4892.         Return: CF set on error
  4893.  
  4894. Format of status record:
  4895. Offset    Size    Description
  4896.  00h    DWORD    total number of read requests
  4897.  04h    DWORD    total number of hits
  4898.  08h    DWORD    number of physical disk reads
  4899.  0Ch    DWORD    total number of sectors requested by physical disk reads
  4900.  10h  6 bytes    ???
  4901.  16h    DWORD    pointer to start of error list
  4902.  1Ah    DWORD    pointer to end of error list
  4903.  1Eh    WORD    ???
  4904.  20h    BYTE    using extended memory if nonzero
  4905.  21h    BYTE    ???
  4906.  22h  4 BYTEs    ASCII version number
  4907.  26h    WORD    cache size in K
  4908.  28h    WORD    sectors per page
  4909.  
  4910. Format of error list:
  4911. Offset    Size    Description
  4912.  00h    DWORD    relative block address of bad page
  4913.  04h    BYTE    drive
  4914.  05h    BYTE    sector bit-map
  4915.  06h    WORD    next error
  4916. ----------1320-------------------------------
  4917. INT 13 - DISK - ??? (Western Digital "Super BIOS")
  4918.     AH = 20h
  4919.     ???
  4920. Return: ???
  4921. Note:    seems to return some kind of status
  4922. ----------1320FF-----------------------------
  4923. INT 13 - QCACHE - DISMOUNT
  4924.     AX = 20FFh
  4925. Return: ???
  4926. ----------1321-------------------------------
  4927. INT 13 - QCACHE - FLUSH CACHE
  4928.     AH = 21h
  4929. Return: ???
  4930. SeeAlso: AH=25h,AH=2Eh
  4931. ----------1322-------------------------------
  4932. INT 13 - QCACHE - ENABLE/DISABLE CACHE
  4933.     AH = 22h
  4934.     AL = 00h disable cache
  4935.          01h enable cache
  4936. ----------1324-------------------------------
  4937. INT 13 - QCACHE - SET SECTORS
  4938.     AH = 24h
  4939.     BX = number of sectors
  4940. Return: ???
  4941. ----------1325-------------------------------
  4942. INT 13 - QCACHE - SET FLUSH INTERVAL
  4943.     AH = 25h
  4944.     BC = interval
  4945. Return: ???
  4946. SeeAlso: AH=21h,AH=2Eh
  4947. ----------1327--BX0000-----------------------
  4948. INT 13 - QCACHE - INSTALLATION CHECK
  4949.     AH = 27h
  4950.     BX = 0000h
  4951. Return: BX nonzero if installed
  4952. ----------132A-------------------------------
  4953. INT 13 - QCACHE - SET BUFFER SIZE
  4954.     AH = 2Ah
  4955.     AL = buffer size
  4956. Return: ???
  4957. ----------132C-------------------------------
  4958. INT 13 - QCACHE - SET BUFFERED WRITES
  4959.     AH = 2Ch
  4960.     AL = state
  4961.         00h disable
  4962.         01h enable
  4963. Return: ???
  4964. SeeAlso: AH=2Dh
  4965. ----------132D-------------------------------
  4966. INT 13 - QCACHE - SET BUFFERED READ
  4967.     AH = 2Dh
  4968.     AL = state
  4969.         00h disable
  4970.         01h enable
  4971. Return: ???
  4972. SeeAlso: AH=2Ch
  4973. ----------132E-------------------------------
  4974. INT 13 - QCACHE - SET FLUSH COUNT
  4975.     AH = 2Eh
  4976.     BX = flush count
  4977. Return: ???
  4978. SeeAlso: AH=21h,AH=25h
  4979. ----------1330-------------------------------
  4980. INT 13 - QCACHE - GET INFO
  4981.     AH = 30h
  4982.     AL = what to get
  4983.         00h system info
  4984.         01h drive info
  4985.     DS:DX -> buffer for info
  4986. Return: ???
  4987. ----------135504-----------------------------
  4988. INT 13 - Seagate - GET CONTROLLER TYPE???
  4989.     AX = 5504h
  4990.     DX = drive (bit 7 set for hard disk)
  4991. Return: CF clear if successful
  4992.         AX = 4321h,4322h if Seagate controller
  4993.     CF set on error
  4994. SeeAlso: AX=5505h,AX=5514h
  4995. ----------135505-----------------------------
  4996. INT 13 - Seagate - PARK HEADS???
  4997.     AX = 5505h
  4998.     DX = drive (bit 7 set for hard disk)
  4999. Return: CF clear if successful
  5000.     CF set on error
  5001. SeeAlso: AX=5504h,AX=5515h
  5002. ----------135514-----------------------------
  5003. INT 13 - Seagate - ???
  5004.     AX = 5514h
  5005.     DX = drive (bit 7 set for hard disk)
  5006. Return: CF clear if successful
  5007.     CF set on error
  5008.     AX = return value (FEBEh,FEBFh,FEDAh,FEDBh)
  5009. SeeAlso: AX=5504h,AX=5515h
  5010. ----------135515-----------------------------
  5011. INT 13 - Seagate - PARK HEADS???
  5012.     AX = 5515h
  5013.     DX = drive (bit 7 set for hard disk)
  5014. Return: CF clear if successful
  5015.     CF set on error
  5016. Note:    appears to be identical to AX=5505h
  5017. SeeAlso: AX=5504h,AX=5505h
  5018. ----------1370-------------------------------
  5019. INT 13 - Priam EDVR.SYS DISK PARTITIONING SOFTWARE???
  5020.     AH = 70h
  5021.     ???
  5022. Return: ???
  5023. Note:    Priam's EDISK.EXE (FDISK replacement) and EFMT.EXE (low-level
  5024.       formatting program) make this call, presumably to EDVR.SYS (the
  5025.       partitioning driver)
  5026. SeeAlso: AH=ADh
  5027. ----------1375-------------------------------
  5028. INT 13 - ???
  5029.     AH = 75h
  5030.     ???
  5031. Return: AH = ???
  5032.     ???
  5033. Note:    intercepted by PC-Cache (v5.1 only)
  5034. ----------1376-------------------------------
  5035. INT 13 - ???
  5036.     AH = 76h
  5037.     ???
  5038. Return: AH = ???
  5039.     ???
  5040. Note:    intercepted by PC-Cache (v5.1 only)
  5041. ----------137B00-----------------------------
  5042. INT 13 - NOW! - GET INFORMATION
  5043.     AX = 7B00h
  5044.     CX:DX -> 1F8h-byte buffer for information record (see below)
  5045. Return: AX = 0000h
  5046.     BX = segment of main resident code
  5047.     ES = ???
  5048. Program: NOW! is a disk cache by Vertisoft Systems, Inc.
  5049. SeeAlso: AX=7B02h,AH=EFh
  5050.  
  5051. Format of information record:
  5052. Offset    Size    Description
  5053.  00h 80 BYTEs    name of directory from which NOW! was started
  5054.  50h 424 BYTEs    ???
  5055.  81h  ? BYTEs    array of bytes for ???
  5056.  F7h 250 BYTEs    array of 25 entries, one per drive???
  5057.     Offset    Size    Description
  5058.      00h  2 BYTEs    ???
  5059.      02h    WORD    ???
  5060.      04h    WORD    ???
  5061.      06h  4 BYTEs    ???
  5062. 1F1h  7 BYTEs    ???
  5063. ----------137B01-----------------------------
  5064. INT 13 - NOW! - ???
  5065.     AX = 7B01h
  5066. Return: DX = segment of ???
  5067. SeeAlso: AX=7B00h
  5068. ----------137B02-----------------------------
  5069. INT 13 - NOW! - SET INFORMATION
  5070.     AX = 7B02h
  5071.     BX = segment of ??? (10h above a PSP)
  5072.     CX:DX -> 1F8h-byte information record (see AX=7B00h)
  5073. Return: ???
  5074. Program: NOW! is a disk cache by Vertisoft Systems, Inc.
  5075. Note:    NOW! grabs the INT 24h value from the PSP reached via the segment in
  5076.       BX
  5077. SeeAlso: AX=7B00h
  5078. ----------137B03-----------------------------
  5079. INT 13 - NOW! - ???
  5080.     AX = 7B03h
  5081.     ???
  5082. Return: ???
  5083. SeeAlso: AX=7B00h,AX=7B04h
  5084. ----------137B04-----------------------------
  5085. INT 13 - NOW! - ???
  5086.     AX = 7B04h
  5087.     ???
  5088. Return: ???
  5089. SeeAlso: AX=7B03h
  5090. ----------137B05-----------------------------
  5091. INT 13 - NOW! - GET ???
  5092.     AX = 7B05h
  5093.     BX:AX = number of physical accesses???
  5094.     DX:CX = total disk accesses???
  5095. SeeAlso: AX=7B00h,AX=7B06h
  5096. ----------137B06-----------------------------
  5097. INT 13 - NOW! - GET ???
  5098.     AX = 7B06h
  5099.     BX = ???
  5100. Return: AX = 0000h
  5101.     BX = ???
  5102. SeeAlso: AX=7B05h,AX=7B07h
  5103. ----------137B07-----------------------------
  5104. INT 13 - NOW! - GET ???
  5105.     AX = 7B07h
  5106. Return: AX = ???
  5107.     BX = ???
  5108.     CX = ???
  5109.     DX = ???
  5110. SeeAlso: AX=7B06h
  5111. ----------137B08-----------------------------
  5112. INT 13 - NOW! - ???
  5113.     AX = 7B08h
  5114.     CX = ??? (default 00h)
  5115. Return: ???
  5116. SeeAlso: AX=7B00h
  5117. ----------1380--CX6572-----------------------
  5118. INT 13 - FAST! - API
  5119.     AH = 80h
  5120.     CX = 6572h
  5121.     DX = 1970h
  5122.     ES:BX -> data structure (see below)
  5123.     AL = function
  5124.         01h ???
  5125.         04h ???
  5126.         05h ???
  5127.         06h installation check
  5128.         Return: AX = 1965h if installed
  5129.         07h ???
  5130.         09h ???
  5131.         0Ah ???
  5132.         0Bh ???
  5133.         0Ch set ??? flag
  5134.         0Dh clear ??? flag
  5135. Return: AH = 00h if successful (except function 06h)
  5136.  
  5137. Format of data structure:
  5138. Offset    Size    Description
  5139.  00h    DWORD    pointer to 19-byte signature string 
  5140.         13h 07h 06h 08h 11h 18h 0Fh 0Eh 02h 18h 13h 08h 0Bh 08h 01h 00h
  5141.           04h 08h 15h  (v4.04)
  5142.  04h    ???    ???
  5143. ----------1381--SI4358-----------------------
  5144. INT 13 - Super PC Kwik/PC-Cache 5.x - ???
  5145.     AH = 81h
  5146.     SI = 4358h
  5147.     ???
  5148. Return: ???
  5149. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5150.       Super PC Kwik, and thus support this call
  5151.     returns immediately in PC-Cache v5.x
  5152. ----------1382--SI4358-----------------------
  5153. INT 13 - Super PC Kwik/PC-Cache 5.x - ???
  5154.     AH = 82h
  5155.     SI = 4358h
  5156.     ???
  5157. Return: AL = ???
  5158. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5159.       Super PC Kwik, and thus support this call
  5160. SeeAlso: AH=84h
  5161. ----------1383--SI4358-----------------------
  5162. INT 13 - Super PC Kwik/PC-Cache 5.x - ???
  5163.     AH = 83h
  5164.     SI = 4358h
  5165.     AL = ???
  5166.     ES:BX -> ???
  5167.     ???
  5168. Return: ???
  5169. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5170.       Super PC Kwik, and thus support this call
  5171. SeeAlso: AH=85h
  5172. ----------1384--SI4358-----------------------
  5173. INT 13 - Super PC Kwik/PC-Cache 5.x - ???
  5174.     AH = 84h
  5175.     SI = 4358h
  5176.     AL = ???
  5177.     ???
  5178. Return: AL = ???
  5179. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5180.       Super PC Kwik, and thus support this call
  5181. SeeAlso: AH=82h
  5182. ----------1385--SI4358-----------------------
  5183. INT 13 - Super PC Kwik/PC-Cache 5.x - ???
  5184.     AH = 85h
  5185.     SI = 4358h
  5186.     AL = ???
  5187.     DL = ???
  5188.     ???
  5189. Return: ???
  5190. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5191.       Super PC Kwik, and thus support this call
  5192. SeeAlso: AH=83h
  5193. ----------1386--SI4358-----------------------
  5194. INT 13 - Qualitas Qcache v4.00 - ???
  5195.     AH = 86h
  5196.     SI = 4358h
  5197.     ???
  5198. Return: ???
  5199. ----------1387--SI4358-----------------------
  5200. INT 13 - Qualitas Qcache v4.00 - ???
  5201.     AH = 87h
  5202.     SI = 4358h
  5203.     ???
  5204. Return: ???
  5205. ----------1388--SI4358-----------------------
  5206. INT 13 - Qualitas Qcache v4.00 - ???
  5207.     AH = 88h
  5208.     SI = 4358h
  5209.     ???
  5210. Return: ???
  5211. ----------138EED-----------------------------
  5212. INT 13 - HyperDisk v4.01+ - ???
  5213.     AX = 8EEDh
  5214.     ???
  5215. Return: ???
  5216. Note:    HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  5217. SeeAlso: AX=8EEEh,AX=8EEFh,AH=EEh,INT 2F/AH=DFh
  5218. ----------138EEE-----------------------------
  5219. INT 13 - HyperDisk v4.01+ - ???
  5220.     AX = 8EEEh
  5221. Return: CF set
  5222.     AX = CS of HyperDisk resident code
  5223.     ???
  5224. Note:    identical to AX=8EEFh in HYPERDKX v4.21-4.30
  5225. SeeAlso: AX=8EEDh,AX=8EEFh,AH=EEh
  5226. ----------138EEF-----------------------------
  5227. INT 13 - HyperDisk v4.01+ - ???
  5228.     AX = 8EEFh
  5229. Return: CF set
  5230.     AX = CS of HyperDisk resident code
  5231.     ???
  5232. Note:    identical to AX=8EEEh in HYPERDKX v4.21-4.30
  5233. SeeAlso: AX=8EEDh,AX=8EEEh,AH=EEh
  5234. ----------13A0--SI4358-----------------------
  5235. INT 13 - Super PC Kwik - GET RESIDENT CODE SEGMENT
  5236.     AH = A0h
  5237.     SI = 4358h
  5238. Return: AX = segment of resident code
  5239. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5240.       Super PC Kwik, and thus support this call
  5241. SeeAlso: INT 16/AX=FFA5h/CX=1111h
  5242. ----------13A1--SI4358-----------------------
  5243. INT 13 - Super PC Kwik - FLUSH CACHE
  5244.     AH = A1h
  5245.     SI = 4358h
  5246. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5247.       Super PC Kwik, and thus support this call
  5248. SeeAlso: INT 16/AX=FFA5h/CX=FFFFh
  5249. ----------13A2--SI4358-----------------------
  5250. INT 13 - Super PC Kwik - ???
  5251.     AH = A2h
  5252.     SI = 4358h
  5253.     ???
  5254. Return: ???
  5255. Note:    PC Tools PC-Cache 5.x and Qualitas Qcache 4.00 are OEM versions of
  5256.       Super PC Kwik, and thus support this call
  5257. ----------13A5-------------------------------
  5258. INT 13 C - Super PC Kwik - ???
  5259.     AH = A5h
  5260.     SI = ???
  5261. Return: AX = ???
  5262.     SI = ???
  5263. Notes:    called when a program terminates but stays resident (see INT 21/AH=31h)
  5264.     this call is not supported by Qualitas Qcache 4.00
  5265. ----------13AA--SI4358-----------------------
  5266. INT 13 - Qualitas Qcache v4.00 - ???
  5267.     AH = AAh
  5268.     SI = 4358h
  5269.     ???
  5270. Return: ???
  5271. ----------13AB--SI4358-----------------------
  5272. INT 13 - Qualitas Qcache v4.00 - ???
  5273.     AH = ABh
  5274.     SI = 4358h
  5275.     ???
  5276. Return: ???
  5277. ----------13AC--SI4358-----------------------
  5278. INT 13 - Qualitas Qcache v4.00 - ???
  5279.     AH = ACh
  5280.     SI = 4358h
  5281.     ???
  5282. Return: ???
  5283. ----------13AD-------------------------------
  5284. INT 13 - Priam HARD DISK CONTROLLER???
  5285.     AH = ADh
  5286.     ???
  5287. Return: ???
  5288. Note:    this call is made from Priam's EFMT.EXE (low-level formatter), probably
  5289.       to check the ROM type on the controller for their hard disk kits
  5290. SeeAlso: AH=70h
  5291. ----------13AD--SI4358-----------------------
  5292. INT 13 - Qualitas Qcache v4.00 - ???
  5293.     AH = ADh
  5294.     SI = 4358h
  5295.     ???
  5296. Return: ???
  5297. ----------13B0--SI4358-----------------------
  5298. INT 13 - Super PC Kwik - ???
  5299.     AH = B0h
  5300.     SI = 4358h
  5301.     ???
  5302. Return: ???
  5303. Note:    PC Tools PC-Cache 5.x is an OEM version of Super PC Kwik, and thus
  5304.       supports this call; Qualitas Qcache does not support it
  5305. ----------13EE-------------------------------
  5306. INT 13 - SWBIOS - SET 1024 CYLINDER FLAG
  5307.     AH = EEh
  5308.     DL = drive number (80h, 81h)
  5309. Return: CF clear
  5310.        AH = 00h
  5311. Notes:    the following INT 13 call will interpret the cylinder number as 1024
  5312.       less than the desired cylinder
  5313.     flag cleared by all INT 13 calls except AH=EEh
  5314.     SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  5315.       these calls
  5316.     also supported by HyperDisk v4.01+ and PC-Cache v5.5+, in order to allow
  5317.       caching of drives using SWBIOS to access more than 1024 cylinders
  5318. SeeAlso: AH=F9h,AH=FEh,INT 16/AX=FFA5h/CX=1111h,INT 2F/AH=DFh
  5319. ----------13EF-------------------------------
  5320. INT 13 - NOW! - ???
  5321.     AH = EFh
  5322.     CX = ???
  5323.     DL = ???
  5324.     ???
  5325. Return: ???
  5326. SeeAlso: AX=7B00h
  5327. ----------13F9-------------------------------
  5328. INT 13 - SWBIOS - INSTALLATION CHECK
  5329.     AH = F9h
  5330.     DL = drive number (80h,81h)
  5331. Return: CF clear 
  5332.         DX = configuration word
  5333.         bit 15 set if other SWBIOS extensions available
  5334.     CF set on error
  5335. Note:    SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  5336.       these calls
  5337. SeeAlso: AH=EEh
  5338. ----------13FA--DX5945-----------------------
  5339. INT 13 - PC Tools v8+ VSAFE, VWATCH - API
  5340.     AH = FAh
  5341.     DX = 5945h
  5342.     AL = function (00h-07h)
  5343. Return: varies by function
  5344. Note:    this API is identical to the ones on INT 16/AH=FAh and INT 21/AH=FAh,
  5345.       so it is listed in its entirety under INT 16/AX=FA00h and following
  5346. SeeAlso: INT 16/AX=FA00h
  5347. ----------13FE-------------------------------
  5348. INT 13 - SWBIOS - GET EXTENDED CYLINDER COUNT
  5349.     AH = FEh
  5350.     DL = drive number (80h, 81h)
  5351. Return: CF clear
  5352.     DX = number of cylinders beyond 1024 on drive
  5353. Notes:    standard INT 13/AH=08h will return a cylinder count truncated to 1024
  5354.     BIOS without this extension would return count modulo 1024
  5355.     SWBIOS is a TSR by Ontrack Computer Systems; Disk Manager also supports
  5356.       these calls
  5357. SeeAlso: AH=EEh
  5358. ----------14---------------------------------
  5359. INT 14 - SERIAL I/O- Digiboard DigiCHANNEL PC/X* Extender INT 14 (XAPCM232.SYS)
  5360. Note:    the installation check for this driver is to determine whether the
  5361.       "~DOSXAM~" character device exists
  5362. ----------1400-------------------------------
  5363. INT 14 - SERIAL - INITIALIZE PORT
  5364.     AH = 00h
  5365.     AL = port parameters
  5366.         bits 7-5 data rate (110,150,300,600,1200,2400,4800,9600 bps)
  5367.         bits 4-3 parity (00 or 10 = none, 01 = odd, 11 = even)
  5368.         bit 2    stop bits (set = 2, clear = 1)
  5369.         bits 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)
  5370.     DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
  5371. Return: AH = line status (see AH=03h)
  5372.         FFh if error on Digiboard XAPCM232.SYS
  5373.     AL = modem status (see AH=03h)
  5374. Notes:    default handler is at F000h:E739h in IBM PC and 100% compatible BIOSes
  5375.     since the PCjr supports a maximum of 4800 bps, attempting to set 9600
  5376.       bps will result in 4800 bps
  5377.     various network and serial-port drivers support the standard BIOS
  5378.       functions with interrupt-driven I/O instead of the BIOS's polled I/O
  5379. SeeAlso: AH=04h"SERIAL",AH=04h"MultiDOS",AH=05h"SERIAL",AX=8000h"ARTICOM"
  5380. SeeAlso: AH=81h"COMM-DRV",AH=82h"COURIERS",AH=8Ch
  5381. ----------1400-------------------------------
  5382. INT 14 - FOSSIL (Fido/Opus/Seadog Standard Interface Level) - INITIALIZE
  5383.     AH = 00h
  5384.     AL = initializing parameters
  5385.         7 - 6 - 5       4 - 3     2      1 - 0
  5386.         -BAUD RATE-       PARITY   STOP   WORD
  5387.                     BITS  LENGTH
  5388.         000 19200 bd   00 none  0: 1  00: 5
  5389.         001 38400 bd   01 odd   1: 2  01: 6
  5390.         010      300 bd   11 even      10: 7
  5391.         011      600 bd          11: 8
  5392.         100     1200 bd
  5393.         101     2400 bd
  5394.         110     4800 bd
  5395.         111     9600 bd (4800 on PCjr)
  5396.     DX = port number (0-3 or FFh if only performing non-I/O setup)
  5397. Return: AH = RS-232 status code bits
  5398.         0: RDA - input data is available in buffer
  5399.         1: OVRN - data has been lost
  5400.         5: THRE - room is available in output buffer
  5401.         6: TSRE - output buffer empty
  5402.     AL = modem status bits
  5403.         3: always 1
  5404.         7: DCD - carrier detect
  5405. SeeAlso: AH=05h"FOSSIL",AH=81h"COMM-DRV",AH=82h"COURIERS"
  5406. ----------1400-------------------------------
  5407. INT 14 - MBBIOS - INITIALIZE PORT
  5408.     AH = 00h
  5409.     AL = port parameters
  5410.         bits 7-5 data rate
  5411.             (normally 110,150,300,600,1200,2400,4800,9600 bps;
  5412.             9600,14400,19200,28800,38400,57600,115200,330400 bps
  5413.             if the high-speed option is set)
  5414.         bits 4-3 parity (00 or 10 = none, 01 = odd, 11 = even)
  5415.         bit 2    stop bits (set = 2, clear = 1)
  5416.         bits 1-0 data bits (00 = 5, 01 = 6, 10 = 7, 11 = 8)
  5417.     DX = port number
  5418. Return: AH = line status (see AH=03h)
  5419.     AL = modem status (see AH=03h)
  5420. Note:    MBBIOS was written by H. Roy Engehausen
  5421. SeeAlso: AH=04h"MBBIOS",AH=05h"MBBIOS"
  5422. ----------1401-------------------------------
  5423. INT 14 - SERIAL - WRITE CHARACTER TO PORT
  5424.     AH = 01h
  5425.     AL = character to write
  5426.     DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
  5427. Return: AH bit 7 clear if successful
  5428.     AH bit 7 set on error
  5429.     AH bits 6-0 = port status (see AH=03h)
  5430. Note:    various network and serial-port drivers support the standard BIOS
  5431.       functions with interrupt-driven I/O instead of the BIOS's polled I/O
  5432. SeeAlso: AH=02h,AH=0Bh"FOSSIL",AX=8000h"ARTICOM",AH=89h
  5433. ----------1402-------------------------------
  5434. INT 14 - SERIAL - READ CHARACTER FROM PORT
  5435.     AH = 02h
  5436.     AL = 00h (ArtiCom)
  5437.     DX = port number (00h-03h (04h-43h for Digiboard XAPCM232.SYS))
  5438. Return: AH = line status (see AH=03h)
  5439.     AL = received character if AH bit 7 clear
  5440. Notes:    will timeout if DSR is not asserted, even if function 03h returns
  5441.       data ready
  5442.     various network and serial-port drivers support the standard BIOS
  5443.       functions with interrupt-driven I/O instead of the BIOS's polled I/O
  5444. SeeAlso: AH=01h,AH=02h"FOSSIL",AH=84h,AH=FCh
  5445. ----------1402-------------------------------
  5446. INT 14 - FOSSIL - RECEIVE CHARACTER WITH WAIT
  5447.     AH = 02h
  5448.     DX = port number (0-3)
  5449. Return: AL = character received
  5450.     AH = 00h
  5451. SeeAlso: AH=01h,AH=02h"SERIAL"
  5452. ----------1403-------------------------------
  5453. INT 14 - SERIAL - GET PORT STATUS
  5454.     AH = 03h
  5455.     AL = 00h (ArtiCom)
  5456.     DX = port number (00h-03h) (04h-43h for Digiboard XAPCM232.SYS)
  5457. Return: AH = line status
  5458.         bit 7: timeout
  5459.         6: transmit shift register empty
  5460.         5: transmit holding register empty
  5461.         4: break detected
  5462.         3: framing error
  5463.         2: parity error
  5464.         1: overrun error
  5465.         0: receive data ready
  5466.     AL = modem status
  5467.         bit 7: carrier detect
  5468.         6: ring indicator
  5469.         5: data set ready
  5470.         4: clear to send
  5471.         3: delta carrier detect
  5472.         2: trailing edge of ring indicator
  5473.         1: delta data set ready
  5474.         0: delta clear to send
  5475.     AX = 9E00h if disconnected (ArtiCom)
  5476. SeeAlso: AH=00h,AH=07h"MultiDOS",AX=8000h"ARTICOM",AH=81h"COURIERS",AX=FD02h
  5477. ----------1404-------------------------------
  5478. INT 14 - SERIAL I/O - EXTENDED INITIALIZE (CONVERTIBLE,PS)
  5479.     AH = 04h
  5480.     AL = break status
  5481.         00h if break
  5482.         01h if no break
  5483.     BH = parity
  5484.         00h no parity
  5485.         01h odd parity
  5486.         02h even parity
  5487.         03h stick parity odd
  5488.         04h stick parity even
  5489.     BL = number of stop bits
  5490.         00h one stop bit
  5491.         01h two stop bits (1.5 if 5 bit word length)
  5492.     CH = word length
  5493.         00h 5 bits
  5494.         01h 6 bits
  5495.         02h 7 bits
  5496.         03h 8 bits
  5497.     CL = bps rate
  5498.         00h 110
  5499.         01h 150
  5500.         02h 300
  5501.         03h 600
  5502.         04h 1200
  5503.         05h 2400
  5504.         06h 4800
  5505.         07h 9600
  5506.         08h 19200
  5507.     DX = port number
  5508. Return: AX = port status code (see AH=00h)
  5509. SeeAlso: AH=00h,AH=1Eh,AX=8000h"ARTICOM"
  5510. ----------1404-------------------------------
  5511. INT 14 - FOSSIL - INITIALIZE DRIVER
  5512.     AH = 04h
  5513.     DX = port number
  5514.     optionally BX=4F50h
  5515.            ES:CX -> byte to be set upon ^C
  5516. Return: AX = 1954h (if successful)
  5517.     BL = maximum function number supported (excluding 7Eh and above)
  5518.     BH = revision of FOSSIL supported
  5519.     DTR is raised
  5520. Note:    the word at offset 6 in the interrupt handler contains 1954h, and the
  5521.       following byte contains the maximum function number supported
  5522. SeeAlso: AH=05h"FOSSIL",AH=1Ch
  5523. ----------1404-------------------------------
  5524. INT 14 - MultiDOS Plus IODRV - INITIALIZE PORT
  5525.     AH = 04h
  5526. Return: port initialized; if Hayes-compatible modem, a connection has been
  5527.       established
  5528. Note:    the port number is stored at offset BEh in the Task Control Block
  5529.       (see INT 15/AH=13h"MultiDOS")
  5530. SeeAlso: AH=00h,AH=05h"MultiDOS",AH=20h"MultiDOS",INT 15/AH=13h"MultiDOS"
  5531. ----------1404-------------------------------
  5532. INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE BAUD RATE
  5533.     AH = 04h
  5534.     AL = initializing parameters
  5535.         bits 7-5 unused
  5536.         bits 4,3: parity (00 none, 01 odd, 11 even)
  5537.         bit 2: stop bits (0 = one, 1 = two)
  5538.         bits 1,0: data bits (00 = five, 01 = six, 10 = seven, 11 = eight)
  5539.     BX = baud rate
  5540.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5541. Return: AH = status
  5542.         00h successful
  5543.         FFh error
  5544. SeeAlso: AH=05h"Digiboard"
  5545. ----------1404-------------------------------
  5546. INT 14 - MBBIOS - INQUIRY
  5547.     AH = 04h
  5548. Return: AH = AAh
  5549.     AL = 55h
  5550. SeeAlso: AH=00h"MBBIOS",AH=09h"MBBIOS"
  5551. ----------1405-------------------------------
  5552. INT 14 - SERIAL I/O - EXTENDED COMMUNICATION PORT CONTROL (CONVERTIBLE,PS)
  5553.     AH = 05h
  5554.     AL = 00h read modem control register
  5555.           Return: BL = modem control register (see below)
  5556.               AH = status
  5557.     AL = 01h write modem control register
  5558.           BL = modem control register
  5559.           bit 0: data terminal ready
  5560.           bit 1: request to send
  5561.           bit 2: OUT1
  5562.           bit 3: OUT2
  5563.           bit 4: LOOP
  5564.           bits 5-7 reserved
  5565.           Return: AX = status
  5566.     DX = port number
  5567. Note:    also supported by ArtiCom
  5568. SeeAlso: AH=00h,AH=1Fh,AX=8000h"ARTICOM"
  5569. ----------1405-------------------------------
  5570. INT 14 - FOSSIL - DEINITIALIZE DRIVER
  5571.     AH = 05h
  5572.     DX = port number
  5573. Return: none
  5574.     DTR is not affected
  5575. SeeAlso: AH=00h,AH=04h"FOSSIL",AH=1Dh,AH=8Dh
  5576. ----------1405-------------------------------
  5577. INT 14 - MultiDOS Plus IODRV - READ CHARACTER FROM PORT
  5578.     AH = 05h
  5579.     AL = timeout in seconds (00h = never)
  5580. Return: AL = status
  5581.         00h successful
  5582.         AH = character read
  5583.         01h read error
  5584.         02h timed out
  5585.         other modem status (CTS, DSR) changed
  5586. Note:    the port number is stored at offset BEh in the Task Control Block
  5587. SeeAlso: AH=02h,AH=04h"MultiDOS",AH=06h"MultiDOS",AH=22h"MultiDOS"
  5588. SeeAlso: INT 15/AH=13h"MultiDOS"
  5589. ----------1405-------------------------------
  5590. INT 14 - Digiboard DigiCHANNEL PC/X* - CHANGE PROTOCOL
  5591.     AH = 05h
  5592.     AL = protocol
  5593.         bits 7-4 unused
  5594.         bit 3: RTS/CTS
  5595.         bit 2: DSR
  5596.         bits 1,0: XON/XOFF
  5597.     BH = new XOFF character (00h = current)
  5598.     BL = new XON character (00h = current)
  5599.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5600. Return: AH = status
  5601.         00h successful
  5602.         FFh error
  5603. SeeAlso: AH=04h"Digiboard"
  5604. ----------1405-------------------------------
  5605. INT 14 - MBBIOS - DROP DTR AND RTS
  5606.     AH = 05h
  5607.     DX = port number
  5608. Return: none
  5609. SeeAlso: AH=00h"MBBIOS",AH=06h"MBBIOS",AH=06h"FOSSIL"
  5610. ----------1406-------------------------------
  5611. INT 14 - FOSSIL - RAISE/LOWER DTR
  5612.     AH = 06h
  5613.     DX = port
  5614.     AL = DTR state to be set
  5615.         00h = lower
  5616.         01h = raise
  5617. SeeAlso: AH=05h"MBBIOS",AH=1Ah
  5618. ----------1406-------------------------------
  5619. INT 14 - MultiDOS Plus IODRV - WRITE CHARACTER TO PORT
  5620.     AH = 06h
  5621.     AL = character
  5622. Return: AL = status
  5623.         00h successful
  5624. Notes:    the port number is stored at offset BEh in the Task Control Block
  5625.     if output queue is full, the calling task is blocked until the
  5626.       character can be stored
  5627. SeeAlso: AH=01h,AH=04h"MultiDOS",AH=05h"MultiDOS",AH=21h"MultiDOS"
  5628. SeeAlso: INT 15/AH=13h"MultiDOS"
  5629. ----------1406-------------------------------
  5630. INT 14 - MBBIOS - RAISE DTR AND RTS
  5631.     AH = 06h
  5632.     DX = port number
  5633. Return: none
  5634. SeeAlso: AH=05h"MBBIOS",AH=07h"MBBIOS"
  5635. ----------1407-------------------------------
  5636. INT 14 - FOSSIL - RETURN TIMER TICK PARAMETERS
  5637.     AH = 07h
  5638. Return: AL = timer tick interrupt number
  5639.     AH = ticks per second on interrupt number in AL
  5640.     DX = approximate number of milliseconds per tick
  5641. SeeAlso: AH=16h
  5642. ----------1407-------------------------------
  5643. INT 14 - MultiDOS Plus IODRV - GET PORT STATUS
  5644.     AH = 07h
  5645. Return: CL = modem status (see AH=03h)
  5646.     CH = character at head of input queue (if any)
  5647.     DX = number of characters in input queue
  5648. Note:    the port number is stored at offset BEh in the Task Control Block
  5649. SeeAlso: AH=03h,AH=05h"MultiDOS",AH=08h"MultiDOS",AH=09h"MultiDOS"
  5650. SeeAlso: AH=23h"MultiDOS",INT 15/AH=13h"MultiDOS"
  5651. ----------1407-------------------------------
  5652. INT 14 - MBBIOS - SEND BREAK
  5653.     AH = 07h
  5654.     DX = port number
  5655. Return: none
  5656. SeeAlso: AH=06h"MBBIOS"
  5657. ----------1408-------------------------------
  5658. INT 14 - FOSSIL - FLUSH OUTPUT BUFFER WAITING TILL ALL OUTPUT IS DONE
  5659.     AH = 08h
  5660.     DX = port number
  5661. SeeAlso: AH=09h"FOSSIL"
  5662. ----------1408-------------------------------
  5663. INT 14 - MultiDOS Plus 4.0 IODRV - GET AND RESET PORT LINE STATUS
  5664.     AH = 08h
  5665. Return: AL = line status (see AH=03h)
  5666.     AH destroyed
  5667. Notes:    the port number is stored at offset BEh in the Task Control Block
  5668.     on every line status change, the line status is ORed with the line
  5669.       status accumulator; this function returns the accumulator and clears
  5670.       it
  5671. SeeAlso: AH=03h,AH=04h"MultiDOS",AH=07h"MultiDOS",INT 15/AH=13h"MultiDOS"
  5672. ----------1408-------------------------------
  5673. INT 14 - Digiboard DigiCHANNEL PC/X* - ALTERNATE STATUS CHECK
  5674.     AH = 08h
  5675.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5676. Return: AH = RS232 status bits (see AH=03h)
  5677.     ZF set if no characters queued
  5678.     ZF clear if character available
  5679.         AL = next character
  5680. SeeAlso: AH=03h,AH=09h"Digiboard"
  5681. ----------1408-------------------------------
  5682. INT 14 - MBBIOS - NON-DESTRUCTIVE READ
  5683.     AH = 08h
  5684.     DX = port number
  5685. Return: AL = character
  5686.     AH = status (see AH=02h)
  5687. SeeAlso: AH=0Bh"MBBIOS",AH=0Ch"FOSSIL"
  5688. ----------1409-------------------------------
  5689. INT 14 - FOSSIL - PURGE OUTPUT BUFFER THROWING AWAY ALL PENDING OUTPUT
  5690.     AH = 09h
  5691.     DX = port number
  5692. SeeAlso: AH=08h"FOSSIL",AH=0Ah"FOSSIL",AH=88h
  5693. ----------1409-------------------------------
  5694. INT 14 - MultiDOS Plus IODRV - RESET PORT STATUS
  5695.     AH = 09h
  5696. Return: modem status byte cleared
  5697. Note:    the port number is stored at offset BEh in the Task Control Block
  5698. SeeAlso: AH=04h"MultiDOS",AH=07h"MultiDOS",INT 15/AH=13h"MultiDOS"
  5699. ----------1409-------------------------------
  5700. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR BUFFERS
  5701.     AH = 09h
  5702.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5703. Return: AH = status
  5704.         00h successful
  5705.         FFh error
  5706. SeeAlso: AH=08h"Digiboard",AH=0Ah"Digiboard",AH=10h"Digiboard"
  5707. ----------1409-------------------------------
  5708. INT 14 - MBBIOS - GET/SET OPTIONS
  5709.     AH = 09h
  5710.     AL = option byte
  5711.         00000001b - Transmit Buffering Enabled
  5712.         00000101b - Hardware Handshaking Enabled
  5713.         00100000b - High Speed Option Enabled
  5714.     DX = port number???
  5715. Return: AL = old option byte
  5716. SeeAlso: AH=04h"MBBIOS",AH=10h"FOSSIL"
  5717. ----------140A-------------------------------
  5718. INT 14 - FOSSIL - PURGE INPUT BUFFER THROWING AWAY ALL PENDING INPUT
  5719.     AH = 0Ah
  5720.     DX = port number
  5721. SeeAlso: AH=09h"FOSSIL",AH=85h
  5722. ----------140A-------------------------------
  5723. INT 14 - Digiboard DigiCHANNEL PC/X* - INPUT QUEUE CHECK
  5724.     AH = 0Ah
  5725.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5726. Return: AX = number of characters available in buffer
  5727. SeeAlso: AH=09h"Digiboard",AH=0Dh"Digiboard"
  5728. ----------140A-------------------------------
  5729. INT 14 - MBBIOS - WRITE BUFFER
  5730.     AH = 0Ah
  5731.     CX = count
  5732.     ES:DI -> buffer
  5733. Return: AX = status (see AH=03h)
  5734.     DI = is updated
  5735.     CX = unsent character count
  5736. SeeAlso: AH=0Bh"MBBIOS",AH=19h"FOSSIL"
  5737. ----------140B-------------------------------
  5738. INT 14 - FOSSIL - TRANSMIT NO WAIT
  5739.     AH = 0Bh
  5740.     AL = character
  5741.     DX = port number
  5742. Return: AX = 0000h character not accepted
  5743.        = 0001h character accepted
  5744. SeeAlso: AH=01h
  5745. ----------140B-------------------------------
  5746. INT 14 - MBBIOS - READ BUFFER
  5747.     AH = 0Bh
  5748.     CX = size of buffer
  5749.     ES:DI -> buffer
  5750. Return: AH = LSR
  5751.     AL = MSR
  5752.     CX = count of characters
  5753.     DI = is updated
  5754. SeeAlso: AH=08h"MBBIOS",AH=0Ah"MBBIOS",AH=18h"FOSSIL"
  5755. ----------140C-------------------------------
  5756. INT 14 - FOSSIL - NON-DESTRUCTIVE READ AHEAD
  5757.     AH = 0Ch
  5758.     DX = port number
  5759. Return: AX = FFFFh character not available
  5760.     AX = 00xxh character xx available
  5761. SeeAlso: AH=08h"MBBIOS",AH=20h"FOSSIL"
  5762. ----------140D-------------------------------
  5763. INT 14 - FOSSIL - KEYBOARD READ WITHOUT WAIT
  5764.     AH = 0Dh
  5765. Return: AX = FFFFh character not available
  5766.        = xxyyh standard IBM-style scan code
  5767. SeeAlso: AH=0Eh
  5768. ----------140D-------------------------------
  5769. INT 14 - Digiboard DigiCHANNEL PC/X* - GET POINTER TO CH_KEY_RDY FLAG
  5770.     AH = 0Dh
  5771.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5772. Return: ES:BX -> CH_KEY_RDY flag
  5773. SeeAlso: AH=0Ah"Digiboard"
  5774.  
  5775. Values for CH_KEY_RDY flag:
  5776.  00h    receive buffer empty
  5777.  FFh    characters available
  5778. ----------140E-------------------------------
  5779. INT 14 - FOSSIL - KEYBOARD READ WITH WAIT
  5780.     AH = 0Eh
  5781. Return: AX = xxyyh standard IBM-style scan code
  5782. SeeAlso: AH=0Dh"FOSSIL"
  5783. ----------140E-------------------------------
  5784. INT 14 - Digiboard DigiCHANNEL PC/X* - WRITE STRING
  5785.     AH = 0EH
  5786.     CX = number of characters to write
  5787.     ES:BX -> string
  5788.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5789. Return: AX = number of characters actually written
  5790.     ZF clear if successful
  5791.     ZF set on error
  5792. SeeAlso: AH=0Fh"Digiboard"
  5793. ----------140F-------------------------------
  5794. INT 14 - FOSSIL - ENABLE/DISABLE FLOW CONTROL
  5795.     AH = 0Fh
  5796.     AL = bit mask describing flow control requested
  5797.         0: xon/xoff on transmit (watch for xoff while sending)
  5798.         1: CTS/RTS (CTS on transmit/RTS on receive)
  5799.         2: reserved
  5800.         3: xon/xoff on receive (send xoff when buffer near full)
  5801.         4-7: all 1
  5802.     DX = port number
  5803. SeeAlso: AH=09h"MBBIOS",AH=10h"FOSSIL"
  5804. ----------140F-------------------------------
  5805. INT 14 - Digiboard DigiCHANNEL PC/X* - READ STRING
  5806.     AH = 0Fh
  5807.     CX = number of characters to read
  5808.     ES:BX -> buffer
  5809.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5810. Return: AX = number of characters read
  5811.     ZF clear if successful
  5812.     ZF set on error (line status or wrong number of characters)
  5813. SeeAlso: AH=0Eh"Digiboard"
  5814. ----------1410-------------------------------
  5815. INT 14 - FOSSIL - EXTENDED ^C/^K CHECKING AND TRANSMIT ON/OFF
  5816.     AH = 10h
  5817.     AL = bit mask
  5818.         0: enable/disable ^C/^K checking
  5819.         1: enable/disable the transmitter
  5820.     DX = port number
  5821. SeeAlso: AH=0Fh"FOSSIL"
  5822. ----------1410-------------------------------
  5823. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR RECEIVE BUFFER
  5824.     AH = 10h
  5825.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5826. Return: AH = status
  5827.         00h successful
  5828.         FFh error
  5829. SeeAlso: AH=09h"Digiboard",AH=11h"Digiboard"
  5830. ----------1411-------------------------------
  5831. INT 14 - FOSSIL - SET CURRENT CURSOR LOCATION
  5832.     AH = 11h
  5833.     DH = row
  5834.     DL = column
  5835. Note:    this is the same as INT 10/AH=02h
  5836. SeeAlso: AH=12h"FOSSIL"
  5837. ----------1411-------------------------------
  5838. INT 14 - Digiboard DigiCHANNEL PC/X* - CLEAR TRANSMIT BUFFER
  5839.     AH = 11h
  5840.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5841. Return: AH = status
  5842.         00h successful
  5843.         FFh error
  5844. SeeAlso: AH=09h"Digiboard",AH=10h"Digiboard"
  5845. ----------1412-------------------------------
  5846. INT 14 - FOSSIL - READ CURRENT CURSOR LOCATION
  5847.     AH = 12h
  5848. Return: DH = row
  5849.     DL = column
  5850. Note:    this is the same as INT 10/AH=03h
  5851. SeeAlso: AH=11h"FOSSIL"
  5852. ----------1412-------------------------------
  5853. INT 14 - Digiboard DigiCHANNEL PC/X* - GET TRANSMIT BUFFER FREE SPACE
  5854.     AH = 12h
  5855.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5856. Return: AX = number of bytes free
  5857. SeeAlso: AH=0Ah"Digiboard"
  5858. ----------1413-------------------------------
  5859. INT 14 - FOSSIL - SINGLE CHARACTER ANSI WRITE TO SCREEN
  5860.     AH = 13h
  5861.     AL = character
  5862. Note:    should not be called if it is unsafe to call DOS
  5863. SeeAlso: AH=15h
  5864. ----------1414-------------------------------
  5865. INT 14 - FOSSIL - ENABLE OR DISABLE WATCHDOG PROCESSING
  5866.     AH = 14h
  5867.     AL = 01h enable watchdog
  5868.          00h disable watchdog
  5869.     DX = port number
  5870. ----------1415-------------------------------
  5871. INT 14 - FOSSIL - WRITE CHARACTER TO SCREEN USING BIOS SUPPORT ROUTINES
  5872.     AH = 15h
  5873.     AL = character
  5874. SeeAlso: AH=13h
  5875. ----------1416-------------------------------
  5876. INT 14 - FOSSIL - INSERT/DELETE FUNCTION FROM TIMER TICK CHAIN
  5877.     AH = 16h
  5878.     AL = function
  5879.         00h = delete
  5880.         01h = add
  5881.     ES:DX -> routine to call
  5882. Return: AX = status
  5883.         0000h successful
  5884.         0001h unsuccessful
  5885. SeeAlso: AH=07h"FOSSIL"
  5886. ----------1416-------------------------------
  5887. INT 14 - Digiboard DigiCHANNEL PC/X* - CCB COMMAND
  5888.     AH = 16h
  5889.     AL = CCB command number (see below)
  5890.     BL = byte 2
  5891.     BH = byte 3
  5892.     CL = byte 1 (for all channel functions except 4Eh and 4Fh)
  5893.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5894. Return: AH = status
  5895.         00h successful
  5896.         FFh error
  5897. SeeAlso: AH=18h"Digiboard"
  5898.  
  5899. Values for CCB command number:
  5900.  40h Set Receive Mid Water Mark
  5901.  41h Set Receive High Water Mark
  5902.  42h Flush Receive Buffer
  5903.  43h Flush Transmit Buffer
  5904.  44h Transmit Pause
  5905.  45h Transmit Resume
  5906.  46h Set Interrupt to Host Mask
  5907.  47h Set Baud, Data, Stop and Parity
  5908.  48h Send Break
  5909.  49h Set Modem Lines
  5910.  4Ah Set Break Count
  5911.  4Bh Set Handshake
  5912.  4Ch Set Xon/Xoff Characters
  5913.  4Dh Set Transmit Mid Water Mark
  5914.  4Eh IRQ Polling Timer to Host
  5915.  4Fh Buffer Set All
  5916.  50h Port On
  5917.  51h Port Off
  5918.  52h Receive Pause
  5919.  53h Special Character Interrupt
  5920.  54h RS-422 Enable
  5921. ----------1417-------------------------------
  5922. INT 14 - FOSSIL - REBOOT SYSTEM
  5923.     AH = 17h
  5924.     AL = method
  5925.         00h = cold boot
  5926.         01h = warm boot
  5927. SeeAlso: INT 19
  5928. ----------1418-------------------------------
  5929. INT 14 - FOSSIL - READ BLOCK
  5930.     AH = 18h
  5931.     CX = maximum number of characters to transfer
  5932.     DX = port number
  5933.     ES:DI -> user buffer
  5934. Return: AX = number of characters transferred
  5935. SeeAlso: AH=19h"FOSSIL",AH=83h"COURIERS",AX=FF02h,INT 6B/AX=0100h
  5936. ----------1418-------------------------------
  5937. INT 14 - Digiboard DigiCHANNEL PC/X* - SEND BIOS COMMAND
  5938.     AH = 18h
  5939.     ES:BX -> 16-byte command string
  5940.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5941. Return: AH = status
  5942.         00h successful
  5943.         80h timeout
  5944.     AL = mailbox status
  5945.         00h no errors
  5946.         8Xh BIOS error
  5947.     ES:BX buffer filled in with mailbox string
  5948.     ZF clear if no errors
  5949.     ZF set if either status byte contains an error code
  5950. SeeAlso: AH=16h"Digiboard"
  5951. ----------1419-------------------------------
  5952. INT 14 - FOSSIL - WRITE BLOCK
  5953.     AH = 19h
  5954.     CX = maximum number of characters to transfer
  5955.     DX = port number
  5956.     ES:DI -> user buffer
  5957. Return: AX = number of characters transferred
  5958. SeeAlso: AH=18h"FOSSIL",AH=86h,INT 6B/AX=0000h
  5959. ----------1419-------------------------------
  5960. INT 14 - Digiboard DigiCHANNEL PC/X* - SPECIAL CHARACTER INTERRUPT
  5961.     AH = 19h
  5962.     BL = flag
  5963.         00h disable special character interrupt
  5964.         FFh enable interrupt
  5965.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5966. Return: AH = status
  5967.         00h successful    
  5968.         FFh failed
  5969. SeeAlso: AH=1Ah"Digiboard"
  5970. ----------141A-------------------------------
  5971. INT 14 - FOSSIL - BREAK BEGIN OR END
  5972.     AH = 1Ah
  5973.     AL = 00h stop sending 'break'
  5974.          01h start sending 'break'
  5975.     DX = port number
  5976. SeeAlso: AH=06h"FOSSIL",AH=8Ah,AH=FAh
  5977. ----------141A-------------------------------
  5978. INT 14 - Digiboard DigiCHANNEL PC/X - SPECIAL CHARACTER FLAG/COUNTER
  5979.     AH = 1Ah
  5980.     BX = subfunction
  5981.         00h return pointer to special character flag byte
  5982.         01h return pointer to special character counter word
  5983.     DX = port number (00h-03h) (04h-43h for XAPCM232.SYS)
  5984. Return: ES:BX -> special character flag or counter
  5985. Notes:    flag is FFh if one or more special characters are in the receive
  5986.       buffer; it is 00h and the counter is invalid if no special characters
  5987.       are in the receive buffer
  5988.     counter (if valid) contains the number of characters in the receive
  5989.       buffer up to and including the last-received special character
  5990. ----------141B-------------------------------
  5991. INT 14 - FOSSIL - RETURN INFORMATION ABOUT THE DRIVER
  5992.     AH = 1Bh
  5993.     DX = port number
  5994.     CX = size of user buffer
  5995.     ES:DI -> user buffer for driver info (see below)
  5996. Return: AX = number of characters transferred
  5997.     CX = 3058h ("0X") (X00 FOSSIL only)
  5998.     DX = 2030h (" 0") (X00 FOSSIL only)
  5999.  
  6000. Format of driver info:
  6001. Offset    Size    Description
  6002.  00h    WORD    size of structure in bytes
  6003.  02h    BYTE    FOSSIL spec driver conforms to
  6004.  03h    BYTE    revision level of this specific driver
  6005.  04h    DWORD    pointer to ASCIZ identification string
  6006.  08h    WORD    size of the input buffer
  6007.  0Ah    WORD    number of bytes left in buffer
  6008.  0Ch    WORD    size of the output buffer
  6009.  0Eh    WORD    number of bytes left in buffer
  6010.  10h    BYTE    width of screen
  6011.  11h    BYTE    length of screen
  6012.  12h    BYTE    actual baud rate, computer to modem
  6013. ----------141C-------------------------------
  6014. INT 14 - X00 FOSSIL - ACTIVATE PORT
  6015.     AH = 1Ch
  6016.     DX = port number
  6017. Return: AX = 1954h if successful
  6018.     BL = maximum function number supported (not including 7Eh and above)
  6019.     BH = revision of FOSSIL specification supported
  6020. Note:    this is a duplicate of AH=04h, so that AH=04h may be made compatible
  6021.       with the PS/2 BIOS in a future release
  6022. SeeAlso: AH=04h"FOSSIL",AH=1Dh
  6023. ----------141D-------------------------------
  6024. INT 14 - X00 FOSSIL - DEACTIVATE PORT
  6025.     AH = 1Dh
  6026.     DX = port number
  6027. Return: none
  6028. Notes:    this is a duplicate of AH=05h, so that AH=05h may be made compatible
  6029.       with the PS/2 BIOS in a future release
  6030.     ignored if the port was never activated with AH=04h or AH=1Ch
  6031. SeeAlso: AH=05h"FOSSIL",AH=1Ch
  6032. ----------141E-------------------------------
  6033. INT 14 - X00 FOSSIL - EXTENDED LINE CONTROL INITIALIZATION
  6034.     AH = 1Eh
  6035.     AL = break status
  6036.         00h if break
  6037.         01h if no break
  6038.     BH = parity
  6039.         00h no parity
  6040.         01h odd parity
  6041.         02h even parity
  6042.         03h stick parity odd
  6043.         04h stick parity even
  6044.     BL = number of stop bits
  6045.         00h one stop bit
  6046.         01h two stop bits (1.5 if 5 bit word length)
  6047.     CH = word length
  6048.         00h 5 bits
  6049.         01h 6 bits
  6050.         02h 7 bits
  6051.         03h 8 bits
  6052.     CL = bps rate
  6053.         00h 110
  6054.         01h 150
  6055.         02h 300
  6056.         03h 600
  6057.         04h 1200
  6058.         05h 2400
  6059.         06h 4800
  6060.         07h 9600
  6061.         08h 19200
  6062.     DX = port number
  6063. Return: AX = port status code (see AH=00h)
  6064. Notes:    this function is intended to exactly emulate the PS/2 BIOS AH=04h call
  6065.     if the port was locked at X00 load time, the appropriate parameters are
  6066.       ignored
  6067. SeeAlso: AH=00h,AH=04h"SERIAL I/O"
  6068. ----------141F-------------------------------
  6069. INT 14 - X00 FOSSIL - EXTENDED SERIAL PORT STATUS/CONTROL
  6070.     AH = 1Fh
  6071.     AL = 00h read modem control register
  6072.           Return: BL = modem control register (see below)
  6073.               AH = status
  6074.     AL = 01h write modem control register
  6075.           BL = modem control register
  6076.           bit 0: data terminal ready
  6077.           bit 1: request to send
  6078.           bit 2: OUT1
  6079.           bit 3: OUT2 (interrupts) enabled
  6080.           bit 4: LOOP
  6081.           bits 5-7 reserved
  6082.           Return: AX = status
  6083.     DX = port number
  6084. SeeAlso: AH=00h,AH=05h"SERIAL I/O"
  6085. Notes:    this function is intended to exactly emulate the PS/2 BIOS AH=05h call
  6086.     X00 forces BL bit 3 set (interrupts cannot be disabled)
  6087. ----------1420-------------------------------
  6088. INT 14 - X00 FOSSIL - DESTRUCTIVE READ WITH NO WAIT
  6089.     AH = 20h
  6090.     DX = port number
  6091. Return: AH = 00h if character was available
  6092.         AL = next character (removed from receive buffer)
  6093.     AX = FFFFh if no character available
  6094. SeeAlso: AH=0Ch,AH=21h"X00"
  6095. ----------1420-------------------------------
  6096. INT 14 - Alloy MW386 - ATTACH LOGICAL COMMUNICATIONS PORT TO PHYSICAL PORT
  6097.     AH = 20h
  6098.     AL = logical port (01h COM1, 02h COM2)
  6099.     DX = physical port number
  6100. Return: AX = status
  6101.         0000h successful
  6102.         FFFFh failed
  6103. SeeAlso: AH=21h"Alloy",AH=22h"Alloy",AH=23h"Alloy",INT 17/AH=8Bh"Alloy"
  6104. ----------1420-------------------------------
  6105. INT 14 - MultiDOS Plus - INITIALIZE PORT
  6106.     AH = 20h
  6107.     AL = port parameters (see AH=00h"SERIAL")
  6108.     DX = port number (0-3)
  6109. Return: AH = status
  6110.         00h successful
  6111.         41h no such port
  6112.         64h monitor mode already active
  6113. SeeAlso: AH=00h"SERIAL",AH=04h"MultiDOS",AH=21h"MultiDOS",AH=23h"MultiDOS"
  6114. ----------1421-------------------------------
  6115. INT 14 - X00 FOSSIL - STUFF RECEIVE BUFFER
  6116.     AH = 21h
  6117.     AL = character
  6118.     DX = port number
  6119. Notes:    the given character is inserted at the end of the receive buffer as if
  6120.       it had just arrived from the serial port; all normal receive
  6121.       processing (XON/XOFF, ^C/^K) is performed on the character
  6122.     fully re-entrant
  6123. SeeAlso: AH=20h"X00"
  6124. ----------1421-------------------------------
  6125. INT 14 - Alloy MW386 v1.x only - RELEASE PHYSICAL COMMUNICATIONS PORT
  6126.     AH = 21h
  6127.     DX = physical port number
  6128. Return: AX = status
  6129.         0000h successful
  6130.         FFFFh failed
  6131. SeeAlso: AH=20h"Alloy",AH=22h"Alloy"
  6132. ----------1421-------------------------------
  6133. INT 14 - MultiDOS Plus - TRANSMIT CHARACTER
  6134.     AH = 21h
  6135.     AL = character to send
  6136.     DX = port number
  6137. Return: AH = status
  6138.         00h successful
  6139.         39h no DSR or CTS
  6140.         3Ch no DSR
  6141.         3Bh no CTS
  6142.         41h no such port
  6143.         42h monitor mode not active
  6144.         97h timed out
  6145. Note:    monitor mode must have been turned on with AH=24h before calling
  6146. SeeAlso: AH=20h"MultiDOS",AH=22h"MultiDOS",AH=24h"MultiDOS"
  6147. ----------1422-------------------------------
  6148. INT 14 - Alloy MW386 v2+ - RELEASE LOGICAL COMMUNICATIONS PORT
  6149.     AH = 22h
  6150.     AL = logical port (01h COM1, 02h COM2)
  6151. Return: AX = status (0000h successful)
  6152. SeeAlso: AH=20h"Alloy",AH=21h"Alloy"
  6153. ----------1422-------------------------------
  6154. INT 14 - MultiDOS Plus - RECEIVE CHARACTER
  6155.     AH = 22h
  6156.     DX = port number
  6157. Return: AH = status (see also AH=21h"MultiDOS")
  6158.         00h successful
  6159.         AL = character
  6160.         3Dh framing and parity error
  6161.         3Eh overrun error
  6162.         3Fh framing error
  6163.         40h parity error
  6164.         96h ring buffer overflow
  6165. Note:    if no character is available, this function waits until a character
  6166.       arrives or an implementation-dependent timeout elapses
  6167. SeeAlso: AH=20h"MultiDOS",AH=21h"MultiDOS",AH=27h
  6168. ----------1423-------------------------------
  6169. INT 14 - Alloy MW386 v2+ - GET PORT NUMBER FROM LOGICAL PORT ID
  6170.     AH = 23h
  6171.     AL = logical port (01h COM1, 02h COM2)
  6172.     DH = user ID
  6173.     DL = process ID (DH,DL both FFh for current task)
  6174. Return: AL = MW386 port mode
  6175.         bit 0: port is shared (spooler only)
  6176.         1: port is spooled instead of direct (spooler only)
  6177.         2: port is assigned as logical COM device, not in spooler
  6178.         3: port is free
  6179.     CX = MW386 port number
  6180.     DH = owner's user ID
  6181.     DL = owner's task ID
  6182. SeeAlso: AH=20h"Alloy",INT 17/AH=8Bh"Alloy"
  6183. ----------1423-------------------------------
  6184. INT 14 - MultiDOS Plus - GET PORT STATUS
  6185.     AH = 23h
  6186.     DX = port number
  6187. Return: AH = line status (see AH=03h)
  6188.     AL = modem status (see AH=03h)
  6189. SeeAlso: AH=03h,AH=07h"MultiDOS",AH=20h"MultiDOS"
  6190. ----------1424-------------------------------
  6191. INT 14 - Alloy MW386 v2+ - CHANGE PHYSICAL PORT PARAMETERS
  6192.     AH = 24h
  6193.     CX = physical I/O port number
  6194.     DS:DX -> configuration table (see below)
  6195. Return: AH = 00h
  6196. Note:    invalid port numbers are merely ignored
  6197. SeeAlso: INT 17/AH=96h
  6198.  
  6199. Format of configuration table:
  6200. Offset    Size    Description
  6201.  00h    BYTE    baud rate
  6202.         00h 38400
  6203.         01h 19200
  6204.         02h  9600
  6205.         03h  7200
  6206.         04h  4800
  6207.         05h  3600
  6208.         06h  2400
  6209.         07h  2000
  6210.         08h  1200
  6211.         09h   600
  6212.         0Ah   300
  6213.         0Bh   150
  6214.         0Ch   134.5
  6215.  01h    BYTE    data bits (00h=5, 01h=6, 02h=7, 03h=8)
  6216.  02h    BYTE    parity (00h none, 01h odd, 02h even)
  6217.  03h    BYTE    stop bits (00h=1, 01h=2)
  6218.  04h    BYTE    receive flow control
  6219.         00h none, 01h XON/XOFF, 02h DTR/DSR, 03h XPC, 04h RTS/CTS
  6220.  05h    BYTE    transmit flow control (as for receive)
  6221. ----------1424-------------------------------
  6222. INT 14 - MultiDOS Plus - SET MONITOR MODE
  6223.     AH = 24h
  6224.     AL = port status storage
  6225.         00h single status for entire receive buffer
  6226.         01h separate status kept for each byte in receive buffer
  6227.     DX = port number
  6228. Return: AH = status
  6229.         00h successful
  6230.         3Ah invalid status storage specified
  6231.         41h no such port
  6232.         64h monitor mode already active
  6233. Note:    in monitor mode, MultiDOS redirects all BIOS video output to a serial
  6234.       port
  6235. SeeAlso: AH=20h"MultiDOS",AH=25h
  6236. ----------1425-------------------------------
  6237. INT 14 - MultiDOS Plus - CLEAR BUFFERS
  6238.     AH = 25h
  6239.     AL = function
  6240.         00h only clear buffers
  6241.         01h clear buffers and deactivate
  6242.     DX = port number
  6243. Return: AH = status
  6244.         00h successful
  6245.         3Ah invalid function
  6246.         41h no such port
  6247.         42h monitor mode not active
  6248. SeeAlso: AH=20h"MultiDOS",AH=24h"MultiDOS"
  6249. ----------1427-------------------------------
  6250. INT 14 - MultiDOS Plus - GET BUFFER CHARACTER COUNT
  6251.     AH = 27h
  6252.     DX = port number
  6253. Return: AH = status
  6254.         00h successful
  6255.         41h no such port
  6256.         42h monitor mode not active
  6257.     AL = number of characters in receive buffer
  6258. ----------147E-------------------------------
  6259. INT 14 - FOSSIL - INSTALL AN EXTERNAL APPLICATION FUNCTION
  6260.     AH = 7Eh
  6261.     AL = code assigned to external application (80h-BFh)
  6262.         80h reserved for communications FOSSIL
  6263.         81h video FOSSIL
  6264.         82h reserved for keyboard FOSSIL
  6265.         83h reserved for system FOSSIL
  6266.     ES:DX -> entry point
  6267. Return: AX = 1954h
  6268.     BL = code assigned to application (same as input AL)
  6269.     DH = 00h failed
  6270.          01h successful
  6271. SeeAlso: AH=7Fh,AH=80h"FOSSIL",AX=8100h,AH=82h"FOSSIL",AH=83h"FOSSIL"
  6272. ----------147F-------------------------------
  6273. INT 14 - FOSSIL - REMOVE AN EXTERNAL APPLICATION FUNCTION
  6274.     AH = 7Fh
  6275.     AL = code assigned to external application
  6276.     ES:DX -> entry point
  6277. Return: AX = 1954h
  6278.     BL = code assigned to application (same as input AL)
  6279.     DH = 00h failed
  6280.          01h successful
  6281. SeeAlso: AH=7Eh
  6282. ----------1480-------------------------------
  6283. INT 14 - COMMUNICATIONS FOSSIL
  6284.     AH = 80h
  6285. SeeAlso: AH=7Eh
  6286. ----------1480-------------------------------
  6287. INT 14 - COURIERS.COM - INSTALLATION CHECK
  6288.     AH = 80h
  6289. Return: AH = E8h if loaded
  6290. Note:    COURIERS is a TSR utility by PC Magazine
  6291. ----------148000-----------------------------
  6292. INT 14 - ARTICOM - INSTALLATION CHECK
  6293.     AX = 8000h
  6294. Return: AL = FFh if installed
  6295.         BH = major version
  6296.         BL = minor version
  6297. Program: ArtiCom is an asynchronous communications driver by Artisoft which
  6298.       works on top of NetBIOS and allows modem/serial-port sharing by
  6299.       programs using INT 14 for serial I/O.
  6300. Note:    ArtiCom supports 32 simultaneous COM ports using multiport cars and
  6301.       drivers
  6302. SeeAlso: AH=00h,AH=01h,AH=02h,AH=03h,AH=04h,AH=05h,AX=8001h,AX=8002h
  6303. ----------148001-----------------------------
  6304. INT 14 - ARTICOM - UNLOAD ASYNCHRONOUS REDIRECTOR FROM MEMORY
  6305.     AX = 8001h
  6306. Return: AX = error code, if error (see AX=8003h)
  6307. SeeAlso: AX=8000h,AX=8002h,AX=8003h
  6308. ----------148002-----------------------------
  6309. INT 14 - ARTICOM - GET ASYNCHRONOUS REDIRECTOR STATUS
  6310.     AX = 8002h
  6311.     ES:DI -> buffer for redirector status structure (see below)
  6312. Return: AX = error code, if error (see AX=8003h)
  6313. SeeAlso: AX=8000h,AX=8003h
  6314.  
  6315. Format of redirector status:
  6316. Offset    Size    Description  
  6317.  00h    WORD    redirector major and minor version numbers
  6318.  02h    WORD    redirectable ports found
  6319.  04h    WORD    redirectable ports + local ports found
  6320.  06h    WORD    redirector internal buffer size
  6321.  08h    WORD    maximum servers maintained
  6322.  0Ah    WORD    number of adapters found
  6323. ----------148003-----------------------------
  6324. INT 14 - ARTICOM - TRANSLATE ERROR CODE TO ERROR STRING
  6325.     AX = 8003h
  6326.     CX = error number to translate
  6327. Return: ES:DI -> ASCIZ error text or NULL if can't translate.
  6328. SeeAlso: AX=8000h
  6329.  
  6330. Values for error codes:
  6331.  00h    "No error"
  6332.  01h    "An invalid port number was specified"
  6333.  02h    "Port is already redirected"
  6334.  03h    "Too many ports redirected"
  6335.  04h    "Cannot locate the server"
  6336.  05h    "Server is busy"
  6337.  06h    "Access denied"
  6338.  07h    "Resource in use"
  6339.  08h    "Resource in use - request queued"
  6340.  09h    "No such resource"
  6341.  0Ah    "Invalid username/password pair"
  6342.  0Bh    "Noncompatible version number"
  6343.  0Ch    "Can't remove from memory"
  6344.  0Dh    "Bad NETBIOS adapter number"
  6345.  0Eh    "No more entries in list"
  6346.  0Fh    "Resource is not available at this time"
  6347.  10h    "Invalid value to INT 14 call"
  6348. ----------148004-----------------------------
  6349. INT 14 - ARTICOM - ATTACH ASYNCHRONOUS RESOURCE
  6350.     AX = 8004h
  6351.     DX = port to redirect (COM1=0, COM2=1, ...)
  6352.     CH = attach type
  6353.     CL = adapter to use for attach, 0FFh to search all
  6354.     ES:DI -> attachment structure (see below)
  6355. Return: AX = error code, if error (see AX=8003h)
  6356. Note:    The wildcard '*' is supported in the server and resource fields.  If
  6357.       wild cards are used then the first matching available server is
  6358.       attached.
  6359. SeeAlso: AX=8000h,AX=8003h,AX=8005h
  6360.  
  6361. Format of attachment structure:
  6362. Offset    Size    Description  
  6363.  00h 16 BYTEs    server to look for attach
  6364.  10h 16 BYTEs    attach to resource name
  6365.  20h 16 BYTEs    username for attach
  6366.  30h 16 BYTEs    password for username or resource
  6367.  40h    BYTE    attach type
  6368.         00h normal
  6369.         01h queue if resource is in use (not yet supported in v1.00)
  6370. ----------148005-----------------------------
  6371. INT 14 - ARTICOM - DETACH ASYNCHRONOUS RESOURCE
  6372.     AX = 8005h
  6373.     DX = port to detach (COM1=0, COM2=1, ...)
  6374. Return: AX = error code, if error (see AX=8003h)
  6375. Note:    only a previously attached resource can be detached
  6376. SeeAlso: AX=8000h,AX=8003h,AX=8004h
  6377. ----------148006-----------------------------
  6378. INT 14 - ARTICOM - GET RESOURCE INFORMATION
  6379.     AX = 8006h
  6380.     BX = remote port (COM1=0, COM2=1, ...)
  6381.     CL = adapter number, FFH to try all adapters 
  6382.     ES:DI -> resource information structure (see below)
  6383.     DS:SI -> 16 byte server name. See note.
  6384. Return: AX = error code, if error (see AX=8003h)
  6385.     BX = next remote port, recall to get next resource info
  6386. Note:    Wild cards supported in both the resource field and server name 
  6387.     string DS:SI. If wild cards used then first matching available
  6388.     resource information is searched. Set resource field to 0FFh to
  6389.     return all resources.
  6390. SeeAlso: AX=8000h,AX=8002h,AX=8003h,AX=8007h
  6391.  
  6392. Format of resource information structure:
  6393. Offset    Size    Description
  6394.  00h    BYTE    00h = free, else used
  6395.  01h 16 BYTEs    resource name
  6396.  11h 16 BYTEs    username of resource user
  6397.  21h    WORD    amount of time used
  6398.  23h    WORD    amount of time remaining
  6399.  53h 48 BYTEs    description of resource
  6400.  93h 64 BYTEs    initialization string for modem 
  6401.  B3h 32 BYTEs    dial string for modem 
  6402.  D3h 32 BYTEs    hang-up string for modem 
  6403. ----------148007-----------------------------
  6404. INT 14 - ARTICOM - GET REDIRECTED PORT INFORMATION
  6405.     AX = 8007h
  6406.     DX = port index (COM1=0, COM2=1, ...)
  6407.     ES:DI -> buffer for port information structure (see below)
  6408. Return: CF clear if redirection info returned and port is redirected
  6409.     CF set if not a redirected port
  6410.     AX = error code, if error (see AX=8003h)
  6411. SeeAlso: AX=8000h,AX=8003h,AX=8006h,AX=8008h
  6412.  
  6413. Format of port information structure:
  6414. Offset    Size    Description
  6415.  00h 16 BYTEs    server name resource is on
  6416.  10h    BYTE    adapter number server is on
  6417.  11h    BYTE    resource name
  6418.  21h    WORD    remote port index, use to get additional information
  6419.  23h    WORD    buffer size
  6420.  25h    WORD    baud rate (see below)
  6421.  26h    BYTE    modem status register
  6422.  27h    BYTE    modem control register
  6423.  28h    BYTE    line status register
  6424.  29h    BYTE    line control register
  6425.  2Ah    BYTE    flow control in use: 0 - NONE, 1 - XON/XOFF, 2 - RTS/CTS
  6426.  2Bh    WORD    send timeout in ticks
  6427.  2Dh    WORD    receive timeout in ticks
  6428.  2Fh    WORD    time used on remote port
  6429.  31h    WORD    time left before timeout
  6430.  33h    BYTE    if server changes allowed?
  6431.  34h    WORD    FFFFh (-1) if connection ok, else old port index
  6432.  
  6433. Values for baud rate:
  6434.  00h    110
  6435.  01h    150
  6436.  02h    300
  6437.  03h    600
  6438.  04h    1200
  6439.  05h    2400
  6440.  06h    4800
  6441.  07h    9600
  6442.  08h    19200
  6443.  09h    38400
  6444.  0Ah    57600
  6445.  0Bh    115200
  6446.  0Ch    134.5
  6447.  0Dh    1800
  6448.  0Eh    2000
  6449.  0Fh    3600
  6450.  10h    7200
  6451. ----------148008-----------------------------
  6452. INT 14 - ARTICOM - GET AVAILABLE SERVER NAME
  6453.     AX = 8008h
  6454.     BX = server index (0,1,...)
  6455.     ES:DI -> server name structure (see below)
  6456. Return: AX = error code, if error (see AX=8003)
  6457.     BX = next remote port, repeat call to get next available server
  6458. Note:    the wildcard '*' is supported in the server name field.     Set the
  6459.       server name to FFh to search for all servers.
  6460. SeeAlso: AX=8000h,AX=8003h,AX=8007h
  6461.  
  6462. Format of server name structure:
  6463. Offset     Size      Description
  6464.   00h 16 BYTEs      (call) ASCIZ servername
  6465.   10h     BYTE      (return) the adapter server is found
  6466. ----------148009-----------------------------
  6467. INT 14 - ARTICOM - SET SEND AND RECEIVE TIMEOUTS 
  6468.     AX = 8009h
  6469.     BX = send timeout in ticks
  6470.     CX = receive timeout in ticks
  6471.     DX = port index (COM1=0, COM2=1, ...)
  6472. Return: nothing
  6473. SeeAlso: AX=8000h,AX=800Ah
  6474. ----------14800A-----------------------------
  6475. INT 14 - ARTICOM - MODIFY FLOW CONTROL
  6476.     AX = 800Ah
  6477.     BL = flow control type (00h none, 01h XON/XOFF, 02h RTS/CTS)
  6478.     DX = port index (COM1=0, COM2=1, ...)
  6479. Return: AX = error code, if error (see AX=8003h)
  6480. Note:    for attached ports only!
  6481. SeeAlso: AX=8000h,AX=8003h,AX=8009h
  6482. ----------148025-----------------------------
  6483. INT 14 - ARTICOM - SET INTERNAL SEND/RECEIVE VECTOR
  6484.     AX = 8025h
  6485.     DS:DX -> address of trap function (see below) to call on read/write
  6486. Note:    setting the vector to a user function allows the redirector's activity
  6487.       to be monitored.
  6488. SeeAlso: AX=8000h,AX=8035h,INT 21/AH=25h
  6489.  
  6490. Trap function called with:
  6491.     AH = operation
  6492.         80h reading character
  6493.         81h writing character
  6494.     AL = character
  6495.     Return: AX must be preserved
  6496.         far JUMP to old trap function (see AX=8035h)
  6497. ----------148035-----------------------------
  6498. INT 14 - ARTICOM - GET INTERNAL SEND/RECEIVE VECTOR
  6499.     AX = 8035h
  6500. Return: ES:BX -> address of current send/receive routine
  6501. Note:    this function returns the address of the routine which is called 
  6502.       inside A-REDIR.EXE each time a character is received or sent on the
  6503.       active COM port.
  6504. SeeAlso: AX=8000h,AX=8025h,INT 21/AH=35h
  6505. ----------1481-------------------------------
  6506. INT 14 - COURIERS.COM - CHECK IF PORT BUSY
  6507.     AH = 81h
  6508.     AL = port number (1-4)
  6509. Return: AH = 00h port available
  6510.          01h port exists but already in use
  6511.          02h port nonexistent
  6512. Note:    COURIERS is a TSR utility by PC Magazine
  6513. SeeAlso: AH=83h,AH=8Dh
  6514. ----------1481-------------------------------
  6515. INT 14 - Egberto Willies COMM-DRV - EXTENDED INITIALIZATION
  6516.     AH = 81h
  6517.     BX:DI -> port control block
  6518. Return: ???
  6519. SeeAlso: AH=00h
  6520.  
  6521. Format of port control block:
  6522. Offset    Type    Description
  6523.  00h    WORD    port IO address
  6524.  02h    WORD    port IRQ
  6525.  04h    WORD    baud rate
  6526.  06h    WORD    parity
  6527.  08h    WORD    data bits
  6528.  0Ah    WORD    stop bits
  6529.  0Ch    WORD    break status
  6530.             0000h off
  6531.  0Eh    WORD    flow control protocol
  6532.  10h    BYTE    input block
  6533.  11h    BYTE    output block
  6534.  12h    WORD    low threshold
  6535.  14h    WORD    high threshold
  6536.  16h    WORD    segment of buffer
  6537.  18h    WORD    offset of buffer
  6538.  1Ah    WORD    input buffer length
  6539.  1Ch    WORD    output buffer length
  6540.  1Eh    BYTE    auxiliary address
  6541.  1Fh    BYTE    spare
  6542.  20h  4 WORDs    spares
  6543. ----------148100-----------------------------
  6544. INT 14 - VIDEO FOSSIL - RETURN VFOSSIL INFORMATION
  6545.     AX = 8100h
  6546.     ES:DI -> buffer for VFOSSIL information (see below)
  6547. Return: AX = 1954h if installed
  6548. SeeAlso: AH=7Eh,AX=8101h
  6549.  
  6550. Format of VFOSSIL information:
  6551. Offset    Size    Description
  6552.  00h    WORD    size of information in bytes, including this field
  6553.  02h    WORD    VFOSSIL major version
  6554.  04h    WORD    VFOSSIL revision level
  6555.  06h    WORD    highest VFOSSIL application function supported
  6556. ----------148101-----------------------------
  6557. INT 14 - VIDEO FOSSIL - OPEN VFOSSIL
  6558.     AX = 8101h
  6559.     ES:DI -> buffer for application function table (see below)
  6560.     CX = length of buffer in bytes
  6561. Return: AX = 1954h if installed
  6562.         BH = highest VFOSSIL application function supported
  6563. Note:    the number of initialized pointers in the application function table
  6564.       will never exceed CX/4; if the buffer is large enough, BH+1 pointers
  6565.       will be initialized
  6566. SeeAlso: AX=8102h
  6567.  
  6568. Format of application function table:
  6569. Offset    Size    Description
  6570.  00h    DWORD    -> function to query current video mode (VioGetMode)
  6571.  04h    DWORD    -> function to set video mode (VioSetMode)
  6572.  08h    DWORD    -> function to query hardware config (VioGetConfig)
  6573.  0Ch    DWORD    -> function to write data in TTY mode (VioWrtTTY)
  6574.  10h    DWORD    -> function to get current ANSI state (VioGetANSI)
  6575.  14h    DWORD    -> function to set new ANSI state (VioSetANSI)
  6576.  18h    DWORD    -> function to get curr cursor position (VioGetCurPos)
  6577.  1Ch    DWORD    -> function to set cursor position (VioSetCurPos)
  6578.  20h    DWORD    -> function to get cursor shape (VioGetCurType)
  6579.  24h    DWORD    -> function to set cursor shape (VioSetCurType)
  6580.  28h    DWORD    -> function to scroll screen up (VioScrollUp)
  6581.  2Ch    DWORD    -> function to scroll screen down (VioScrollDn)
  6582.  30h    DWORD    -> function to read cell string from screen (VioReadCellStr)
  6583.  34h    DWORD    -> function to read char string from screen (VioReadCharStr)
  6584.  38h    DWORD    -> function to write a cell string (VioWrtCellStr)
  6585.  3Ch    DWORD    -> function to write char string, leaving attr (VioWrtCharStr)
  6586.  40h    DWORD    -> function to write char string,const attr (VioWrtCharStrAttr)
  6587.  44h    DWORD    -> function to replicate an attribute (VioWrtNAttr)
  6588.  48h    DWORD    -> function to replicate a cell (VioWrtNCell)
  6589.  4Ch    DWORD    -> function to replicate a character (VioWrtNChar)
  6590.  
  6591. Format of video mode data structure:
  6592. Offset    Size    Description
  6593.  00h    WORD    length of structure including this field
  6594.  02h    BYTE    mode characteristics
  6595.         bit 0: clear if MDA, set otherwise
  6596.         bit 1: graphics mode
  6597.         bit 2: color disabled (black-and-white)
  6598.  03h    BYTE    number of colors supported (1=2 colors, 4=16 colors, etc)
  6599.  04h    WORD    number of text columns
  6600.  06h    WORD    number of text rows
  6601.  08h    WORD    reserved
  6602.  0Ah    WORD    reserved
  6603.  0Ch    DWORD    reserved
  6604.  
  6605. Format of video configuration data:
  6606. Offset    Size    Description
  6607.  00h    WORD    structure length including this field
  6608.  02h    WORD    adapter type
  6609.         00h monochrome/printer
  6610.         01h CGA
  6611.         02h EGA
  6612.         03h VGA
  6613.         07h 8514/A
  6614.  04h    WORD    display type
  6615.         00h monochrome
  6616.         01h color
  6617.         02h enhanced color
  6618.         09h 8514
  6619.  06h    DWORD    adapter memory size
  6620.  
  6621. Format of cursor type record:
  6622. Offset    Size    Description
  6623.  00h    WORD    cursor start line
  6624.  02h    WORD    cursor end line
  6625.  04h    WORD    cursor width (always 01h)
  6626.  06h    WORD    cursor attribute (FFFFh = hidden)
  6627.  
  6628. Call VioGetMode with:
  6629.     STACK:    WORD    VIO handle (must be 00h)
  6630.         DWORD    pointer to video mode data structure (see above)
  6631. Return: AX = error code (00h, 74h, 17Eh, 1B4h)
  6632.         0000h successful
  6633.         0074h internal VIO failure
  6634.         0163h unsupported mode
  6635.         0166h invalid row value
  6636.         0167h invalid column value
  6637.         017Eh buffer too small
  6638.         01A5h invalid VIO parameter
  6639.         01B4h invalid VIO handle
  6640.  
  6641. Call VioSetMode with:
  6642.     STACK:    WORD    VIO handle (must be 00h)
  6643.         DWORD    pointer to video mode data structure (see above)
  6644. Return: AX = error code (00h, 74h, 163h, 17Eh, 1A5h, 1B4h) (see above)
  6645.  
  6646. Call VioGetConfig with:
  6647.     STACK:    WORD    VIO handle (must be 00h)
  6648.         DWORD    pointer to video configuration data buffer (see above)
  6649. Return: AX = error code (00h, 74h, 17Eh, 1B4h) (see above)
  6650.  
  6651. Call VioWrtTTY with:
  6652.     STACK:    WORD    VIO handle (must be 00h)
  6653.         WORD    length of string
  6654.         DWORD    pointer to character string to be written to screen
  6655. Return: AX = error code (00h, 74h, 1B4h) (see above)
  6656. Notes:    write wraps at end of line and terminates if it reaches end of screen
  6657.     in ANSI mode, ANSI control sequences are interpreted, and this func is
  6658.       not required to be reentrant; in non-ANSI mode, the function is
  6659.       reentrant and may be called from within an MSDOS function call
  6660.  
  6661. Call VioGetANSI with:
  6662.     STACK:    WORD    VIO handle (must be 00h)
  6663.         DWORD    pointer to WORD which will be set to 00h if ANSI is off
  6664.             or 01h if ANSI is on
  6665. Return: AX = error code (00h, 74h, 1B4h) (see above)
  6666.  
  6667. Call VioSetANSI with:
  6668.     STACK:    WORD    VIO handle (must be 00h)
  6669.         DWORD    pointer to WORD indicating new state of ANSI
  6670.             00h off
  6671.             01h on
  6672. Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)
  6673.  
  6674. Call VioGetCurPos with:
  6675.     STACK:    WORD    VIO handle (must be 00h)
  6676.         DWORD    pointer to WORD to hold current cursor column (0-based)
  6677.         DWORD    pointer to WORD to hold current cursor row (0-based)
  6678. Return: AX = error code (00h, 74h, 1B4h) (see above)
  6679.  
  6680. Call VioSetCurPos with:
  6681.     STACK:    WORD    VIO handle (must be 00h)
  6682.         WORD    cursor column
  6683.         WORD    cursor row
  6684. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6685. Note:    if either coordinate is invalid, the cursor is not moved
  6686.  
  6687. Call VioGetCurType with:
  6688.     STACK:    WORD    VIO handle (must be 00h)
  6689.         DWORD    pointer to cursor type record (see above)
  6690. Return: AX = error code (00h, 74h, 1B4h) (see above)
  6691.  
  6692. Call VioSetCurType with:
  6693.     STACK:    WORD    VIO handle (must be 00h)
  6694.         DWORD    pointer to cursor type record (see above)
  6695. Return: AX = error code (00h, 74h, 1A4h, 1B4h) (see above)
  6696.  
  6697. Call VioScrollUp with:
  6698.     STACK:    WORD    VIO handle (must be 00h)
  6699.         DWORD    pointer to char/attr cell for filling emptied rows
  6700.         WORD    number or rows to scroll (FFFFh = clear area)
  6701.         WORD    right column of scroll area
  6702.         WORD    bottom row of scroll area
  6703.         WORD    left column of scroll area
  6704.         WORD    top row of scroll area
  6705. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6706.  
  6707. Call VioScrollDn with:
  6708.     STACK:    WORD    VIO handle (must be 00h)
  6709.         DWORD    pointer to char/attr cell for filling emptied rows
  6710.         WORD    number or rows to scroll (FFFFh = clear area)
  6711.         WORD    right column of scroll area
  6712.         WORD    bottom row of scroll area
  6713.         WORD    left column of scroll area
  6714.         WORD    top row of scroll area
  6715. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6716.  
  6717. Call VioReadCellStr with:
  6718.     STACK:    WORD    VIO handle (must be 00h)
  6719.         WORD    column at which to start reading
  6720.         WORD    row at which to start reading
  6721.         DWORD    pointer to WORD containing length of buffer in bytes
  6722.             on return, WORD contains number of bytes actually read
  6723.         DWORD    pointer to buffer for cell string
  6724. Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)
  6725.  
  6726. Call VioReadCharStr with:
  6727.     STACK:    WORD    VIO handle (must be 00h)
  6728.         WORD    column at which to start reading
  6729.         WORD    row at which to start reading
  6730.         DWORD    pointer to WORD containing length of buffer in bytes
  6731.             on return, WORD contains number of bytes actually read
  6732.         DWORD    pointer to buffer for character string
  6733. Return: AX = error code (00h, 74h, 166h ,167h, 1B4h) (see above)
  6734.  
  6735. Call VioWrtCellStr with:
  6736.     STACK:    WORD    VIO handle (must be 00h)
  6737.         WORD    column at which to start writing
  6738.         WORD    row at which to start writing
  6739.         WORD    length of cell string in bytes
  6740.         DWORD    pointer to cell string to write
  6741. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6742. Note:    write wraps at end of line and terminates if it reaches end of screen
  6743.  
  6744. Call VioWrtCharStr with:
  6745.     STACK:    WORD    VIO handle (must be 00h)
  6746.         WORD    column at which to start writing
  6747.         WORD    row at which to start writing
  6748.         WORD    length of character string
  6749.         DWORD    pointer to character string to write
  6750. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6751. Note:    write wraps at end of line and terminates if it reaches end of screen
  6752.  
  6753. Call VioWrtCharStrAttr with:
  6754.     STACK:    WORD    VIO handle (must be 00h)
  6755.         DWORD    pointer to attribute to be applied to each character
  6756.         WORD    column at which to start writing
  6757.         WORD    row at which to start writing
  6758.         WORD    length of character string
  6759.         DWORD    pointer to character string to write
  6760. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6761. Note:    write wraps at end of line and terminates if it reaches end of screen
  6762.  
  6763. Call VioWrtNAttr with:
  6764.     STACK:    WORD    VIO handle (must be 00h)
  6765.         WORD    column at which to start writing
  6766.         WORD    row at which to start writing
  6767.         WORD    number of times to write attribute
  6768.         DWORD    pointer to display attribute to replicate
  6769. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6770. Note:    write wraps at end of line and terminates if it reaches end of screen
  6771.  
  6772. Call VioWrtNCell with:
  6773.     STACK:    WORD    VIO handle (must be 00h)
  6774.         WORD    column at which to start writing
  6775.         WORD    row at which to start writing
  6776.         WORD    number of times to write cell
  6777.         DWORD    pointer to cell to replicate
  6778. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6779. Note:    write wraps at end of line and terminates if it reaches end of screen
  6780.  
  6781. Call VioWrtNChar with:
  6782.     STACK:    WORD    VIO handle (must be 00h)
  6783.         WORD    column at which to start writing
  6784.         WORD    row at which to start writing
  6785.         WORD    number of times to write character
  6786.         DWORD    pointer to character to replicate
  6787. Return: AX = error code (00h, 74h, 166h, 167h, 1B4h) (see above)
  6788. Note:    write wraps at end of line and terminates if it reaches end of screen
  6789. ----------148102-----------------------------
  6790. INT 14 - VIDEO FOSSIL - CLOSE VFOSSIL
  6791.     AX = 8102h
  6792. Return: AX = 1954h
  6793. Note:    terminates all operations; after this call, the video FOSSIL may either
  6794.       be removed from memory or reinitialized
  6795. SeeAlso: AX=8101h,AX=8103h
  6796. ----------148103-----------------------------
  6797. INT 14 - VIDEO FOSSIL - UNINSTALL
  6798.     AX = 8103h
  6799. Return:    AX = 1954h
  6800. Note:    this is an extension to the VFOSSIL spec by Bob Hartman's VFOS_IBM
  6801. ----------1482-------------------------------
  6802. INT 14 - KEYBOARD FOSSIL
  6803.     AH = 82h
  6804. SeeAlso: AH=7Eh
  6805. ----------1482-------------------------------
  6806. INT 14 - COURIERS.COM - CONFIGURE PORT
  6807.     AH = 82h
  6808.     AL = port number (1-4)
  6809.     BX = speed (bps)
  6810.     CX = bit flags
  6811.         bit 0: enable input flow control
  6812.         bit 1: enable output flow control
  6813.         bit 2: use X.PC protocol (not yet implemented)
  6814. SeeAlso: AH=00h,AH=8Ch,INT 7A"X.PC"
  6815. ----------1483-------------------------------
  6816. INT 14 - SYSTEM FOSSIL
  6817.     AH = 83h
  6818. SeeAlso: AH=7Eh
  6819. ----------1483-------------------------------
  6820. INT 14 - COURIERS.COM - START INPUT
  6821.     AH = 83h
  6822.     ES:BX -> circular input buffer
  6823.     CX = length of buffer 
  6824.         (should be at least 128 bytes if input flow control enabled)
  6825. SeeAlso: AH=18h,AH=87h,AH=8Dh,AH=A5h"BAPI"
  6826. ----------1484-------------------------------
  6827. INT 14 - COURIERS.COM - READ CHARACTER
  6828.     AH = 84h
  6829. Return: ZF set if no characters available
  6830.     ZF clear
  6831.        AL = character
  6832.        AH = modem status bits
  6833.         bit 7: set on input buffer overflow
  6834. SeeAlso: AH=02h,AH=86h,AH=89h
  6835. ----------1485-------------------------------
  6836. INT 14 - COURIERS.COM - FLUSH PENDING INPUT
  6837.     AH = 85h
  6838. SeeAlso: AH=0Ah,AH=88h
  6839. ----------1486-------------------------------
  6840. INT 14 - COURIERS.COM - START OUTPUT
  6841.     AH = 86h
  6842.     ES:BX -> output buffer
  6843.     CX = length of output buffer
  6844. SeeAlso: AH=19h,AH=83h"COURIERS",AH=A4h"BAPI"
  6845. ----------1487-------------------------------
  6846. INT 14 - COURIERS.COM - OUTPUT STATUS
  6847.     AH = 87h
  6848. Return: AX = number of unsent characters
  6849. ----------1488-------------------------------
  6850. INT 14 - COURIERS.COM - ABORT OUTPUT
  6851.     AH = 88h
  6852. SeeAlso: AH=09h,AH=85h
  6853. ----------1489-------------------------------
  6854. INT 14 - COURIERS.COM - SEND SINGLE CHARACTER
  6855.     AH = 89h
  6856.     CL = character to send
  6857. SeeAlso: AH=01h,AH=84h
  6858. ----------148A-------------------------------
  6859. INT 14 - COURIERS.COM - SEND BREAK
  6860.     AH = 8Ah
  6861. SeeAlso: AH=89h,AH=FAh
  6862. ----------148C-------------------------------
  6863. INT 14 - COURIERS.COM - SET SPEED
  6864.     AH = 8Ch
  6865.     BX = speed in bps
  6866. SeeAlso: AH=00h,AH=82h"COURIERS"
  6867. ----------148D-------------------------------
  6868. INT 14 - COURIERS.COM - DECONFIGURE PORT
  6869.     AH = 8Dh
  6870. SeeAlso: AH=82h"COURIERS"
  6871. ----------14A0-------------------------------
  6872. INT 14 - 3com BAPI SERIAL I/O - CONNECT TO PORT
  6873.     AH = A0h
  6874.     ???
  6875. Return: ???
  6876. SeeAlso: AH=A1h"BAPI"
  6877. ----------14A0--CXFFFF-----------------------
  6878. INT 14 - Interconnections Inc. TES - INSTALLATION CHECK/STATUS REPORT
  6879.     AH = A0h
  6880.     CX = FFFFh
  6881. Return: CF clear if successful
  6882.         AX = 5445h ('TE')
  6883.         CX <> FFFFh
  6884.         DX = port number
  6885.     CF set on error
  6886. Note:    TES is a network serial port emulation program
  6887. SeeAlso: AH=A1h"TES"
  6888. ----------14A1-------------------------------
  6889. INT 14 - 3com BAPI SERIAL I/O - DISCONNECT FROM PORT
  6890.     AH = A1h
  6891.     ???
  6892. Return: ???
  6893. SeeAlso: AH=A0h"BAPI"
  6894. ----------14A1-------------------------------
  6895. INT 14 - Interconnections Inc. TES - GET LIST OF SESSIONS WITH STATUS
  6896.     AH = A1h
  6897. Return: CX = number of active sessions
  6898.     ES:SI -> status array (see below)
  6899. SeeAlso: AH=A2h"TES",AH=A3h"TES"
  6900.  
  6901. Format of status array entry:
  6902. Offset    Size    Description
  6903.  00h    BYTE    status
  6904.  01h    WORD    offset of name
  6905. ----------14A2-------------------------------
  6906. INT 14 - Interconnections Inc. TES - GET LIST OF SERVER NAMES
  6907.     AH = A2h
  6908. Return:    CX = number of servers
  6909.     ES:SI -> array of offsets from ES for server names
  6910. SeeAlso: AH=A1h"TES"
  6911. ----------14A3-------------------------------
  6912. INT 14 - Interconnections Inc. TES - START A NEW SESSION
  6913.     AH = A3h
  6914.     ES:SI -> ???
  6915. Return: CF clear if successful
  6916.         AX = 5445h ('TE')
  6917.         CX <> FFFFh
  6918.         DX = port number
  6919.     CF set on error
  6920. SeeAlso: AH=A1h"TES",AH=A4h"TES",AH=A6h"TES"
  6921. ----------14A4-------------------------------
  6922. INT 14 - 3com BAPI SERIAL I/O - WRITE BLOCK
  6923.     AH = A4h
  6924.     CX = length
  6925.     DH = session number (00h)
  6926.     ES:BX -> buffer
  6927. Return: CX = number of bytes sent
  6928. SeeAlso: AH=19h,AH=86h,AH=A5h"BAPI"
  6929. ----------14A4-------------------------------
  6930. INT 14 - Interconnections Inc. TES - HOLD CURRENTLY ACTIVE SESSION
  6931.     AH = A4h
  6932.     ???
  6933. Return: ???
  6934. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  6935. ----------14A5-------------------------------
  6936. INT 14 - 3com BAPI SERIAL I/O - READ BLOCK
  6937.     AH = A5h
  6938.     CX = length
  6939.     DH = session number (00h)
  6940.     ES:BX -> buffer
  6941. Return: CX = number of bytes read
  6942. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A4h"BAPI",AX=FF02h
  6943. ----------14A5-------------------------------
  6944. INT 14 - Interconnections Inc. TES - RESUME A SESSION
  6945.     AH = A5h
  6946.     AL = session number
  6947. Return: ???
  6948. SeeAlso: AH=A4h"TES",AH=A6h"TES"
  6949. ----------14A6-------------------------------
  6950. INT 14 - 3com BAPI SERIAL I/O - SEND SHORT BREAK
  6951.     AH = A6h
  6952.     DH = session number (00h)
  6953. SeeAlso: AH=1Ah,AH=8Ah,AH=FAh
  6954. ----------14A6-------------------------------
  6955. INT 14 - Interconnections Inc. TES - DROP A SESSION
  6956.     AH = A6h
  6957.     AL = session number
  6958. Return: AH = status
  6959.         00h successful
  6960.         else error
  6961. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  6962. ----------14A7-------------------------------
  6963. INT 14 - 3com BAPI SERIAL I/O - READ STATUS
  6964.     AH = A7h
  6965.     ???
  6966. Return: ???
  6967. ----------14A7-------------------------------
  6968. INT 14 - Interconnections Inc. TES - SWITCH TO NEXT ACTIVE SESSION
  6969.     AH = A7h
  6970.     ???
  6971. Return: ???
  6972. SeeAlso: AH=A3h"TES",AH=A5h"TES"
  6973. ----------14A8-------------------------------
  6974. INT 14 - Interconnections Inc. TES - SEND STRING TO COMMAND INTERPRETER
  6975.     AH = A8h
  6976.     AL = 00h no visible response
  6977.     ES:SI -> ASCIZ command
  6978. Return: ???
  6979. ----------14AF00BXAAAA-----------------------
  6980. INT 14 - 3com BAPI SERIAL I/O - INSTALLATION CHECK
  6981.     AX = AF00h
  6982.     BX = AAAAh
  6983. Return: AX = AF01h if installed
  6984. ----------14B0-------------------------------
  6985. INT 14 - 3com BAPI SERIAL I/O - ENABLE/DISABLE "ENTER COMMAND MODE" CHARACTER
  6986.     AH = B0h
  6987.     AL = 00h disable
  6988.        = 01h enable
  6989. ----------14B1-------------------------------
  6990. INT 14 - 3com BAPI SERIAL I/O - ENTER COMMAND MODE
  6991.     AH = B1h
  6992. ----------14F0F0-----------------------------
  6993. INT 14 - ASAP v1.0 - ???
  6994.     AX = F0F0h
  6995.     DX = ???
  6996.     ???
  6997. Return: ???
  6998. Note:    ASAP (Automatic Screen Access Program) is a shareware screen reader by
  6999.       MicroTalk
  7000. SeeAlso: AX=F0F1h
  7001. ----------14F0F1DX0000-----------------------
  7002. INT 14 - ASAP v1.0 - INSTALLATION CHECK
  7003.     AX = F0F1h
  7004.     DX = 0000h
  7005. Return: DX = segment of resident code
  7006.        = 0000h if not installed
  7007. Note:    ASAP (Automatic Screen Access Program) is a shareware screen reader by
  7008.       MicroTalk
  7009. SeeAlso: AX=F0F0h,INT 10/AH=38h
  7010. ----------14F4FF-----------------------------
  7011. INT 14 - IBM/Yale EBIOS SERIAL I/O - INSTALLATION CHECK
  7012.     AX = F4FFh
  7013.     DX = port (00h-03h)
  7014. Return: CF clear if present
  7015.         AX = 0000h
  7016.     CF set if not present
  7017.         AX <> 0000h
  7018. ----------14F9-------------------------------
  7019. INT 14 - IBM/Yale EBIOS SERIAL I/O - REGAIN CONTROL
  7020.     AH = F9h
  7021.     DX = port (00h-03h)
  7022. ----------14FA-------------------------------
  7023. INT 14 - IBM/Yale EBIOS SERIAL I/O - SEND BREAK
  7024.     AH = FAh
  7025.     DX = port (00h-03h)
  7026. SeeAlso: AH=1Ah,AH=8Ah
  7027. ----------14FB-------------------------------
  7028. INT 14 - IBM/Yale EBIOS SERIAL I/O - SET OUTGOING MODEM SIGNALS
  7029.     AH = FBh
  7030.     AL = modem control register
  7031.         bit 0: data terminal ready
  7032.         1: request to send
  7033.         2: OUT1
  7034.         3: OUT2
  7035.         4: loopback
  7036.         bits 5-7 unused
  7037.     DX = port (00h-03h)
  7038. ----------14FC-------------------------------
  7039. INT 14 - IBM/Yale EBIOS SERIAL I/O - READ CHARACTER, NO WAIT
  7040.     AH = FCh
  7041.     DX = port (00h-03h)
  7042. Return: AH = RS232 status bits (see AH=00h)
  7043.     AL = character
  7044. SeeAlso: AH=02h,AH=0Ch,AX=FF02h
  7045. ----------14FD02-----------------------------
  7046. INT 14 - IBM/Yale EBIOS SERIAL I/O - READ STATUS
  7047.     AX = FD02h
  7048. Return: CX = number of characters available
  7049. ----------14FF02-----------------------------
  7050. INT 14 - IBM/Yale EBIOS SERIAL I/O - BUFFERED READ
  7051.     AX = FF02h
  7052.     CX = length
  7053.     DX = port (00h-03h)
  7054.     ES:BX -> buffer
  7055. Return: CX = number of characters read
  7056. SeeAlso: AH=18h,AH=83h"COURIERS",AH=A5h"BAPI",AH=FCh
  7057. ---------------------------------------------
  7058. Interrupt List, part 2 of 8
  7059. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  7060. ----------15---------------------------------
  7061. INT 15 - Microsoft TSR Specification
  7062.     No additional information available at this time.
  7063. ----------1500-------------------------------
  7064. INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
  7065.     AH = 00h
  7066. Return: CF set on error
  7067.         AH = 86h no cassette present
  7068.     CF clear if successful
  7069. SeeAlso: AH=01h"CASSETTE"
  7070. ----------1500-------------------------------
  7071. INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
  7072.     AH = 00h
  7073. Return: CX = signed X count
  7074.     DX = signed Y count
  7075. ----------1500-------------------------------
  7076. INT 15 - VMiX v2+ - INSTALLATION CHECK
  7077.     AH = 00h
  7078. Return: DX = 0798h if installed
  7079.         AX = version (AH = major, AL = minor)
  7080. ----------1500-------------------------------
  7081. INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
  7082.     AH = 00h
  7083. Note:    if issued by the highest-priority task while MultiDOS is using
  7084.       priority-based rather than round-robin scheduling, control will be
  7085.       returned to the caller immediately
  7086. SeeAlso: AH=03h"MultiDOS",AX=1000h
  7087. ----------1501-------------------------------
  7088. INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
  7089.     AH = 01h
  7090. Return: CF set on error
  7091.         AH = 86h no cassette present
  7092.     CF clear if successful
  7093. SeeAlso: AH=00h"CASSETTE"
  7094. ----------1501-------------------------------
  7095. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  7096.     AH = 01h
  7097.     AL = NVRAM location (00h to 3Fh)
  7098.     BL = NVRAM data value
  7099. Return: AH = return code
  7100.         00h OK
  7101.         01h address bad
  7102.         02h write error
  7103. SeeAlso: AH=02h"Amstrad"
  7104.  
  7105. Format of NVRAM:
  7106. Offset    Size    Description
  7107.  00h    BYTE    time of day: seconds
  7108.  01h    BYTE    alarm time: seconds
  7109.  02h    BYTE    time of day: minutes
  7110.  03h    BYTE    alarm time: minutes
  7111.  04h    BYTE    time of day: hours
  7112.  05h    BYTE    alarm time: hours
  7113.  06h    BYTE    day of week, 1 = Sunday
  7114.  07h    BYTE    day of month
  7115.  08h    BYTE    month
  7116.  09h    BYTE    year mod 100
  7117.  0Ah    BYTE    RTC status register A
  7118.         bit 7: set if date/time being updated
  7119.             6-4: time base speed, default 010 = 32768 Hz
  7120.             3-0: interrupt rate selection, default 0110 = 1024 Hz
  7121.  0Bh    BYTE    RTC status register B
  7122.         bit 7: clear if normal update, set if abort update
  7123.             6: periodic interrupt enable
  7124.             5: alarm interrupt enable
  7125.             4: update end interrupt enable
  7126.             3: square wave enable
  7127.             2: date mode (clear = BCD, set = binary)
  7128.             1: 24-hour format
  7129.             0: daylight saving time enable
  7130.  0Ch    BYTE    RTC status register C (read-only)
  7131.         bit 7: IRQF flag
  7132.             6: PF flag
  7133.             5: AF flag
  7134.             4: UF flag
  7135.  0Dh    BYTE    RTC status register D
  7136.         bit 7: battery good
  7137.  0Eh  6 BYTEs    time and date machine last used
  7138.  14h    BYTE    user RAM checksum
  7139.  15h    WORD    Enter key scancode/ASCII code
  7140.  17h    WORD    Forward delete key scancode/ASCII code
  7141.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  7142.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  7143.  1Dh    WORD    mouse button 1 scancode/ASCII code
  7144.  1Fh    WORD    mouse button 2 scancode/ASCII code
  7145.  21h    BYTE    mouse X scaling factor
  7146.  22h    BYTE    mouse Y scaling factor
  7147.  23h    BYTE    initial VDU mode and drive count
  7148.  24h    BYTE    initial VDU character attribute
  7149.  25h    BYTE    size of RAM disk in 2K blocks
  7150.  26h    BYTE    initial system UART setup byte
  7151.  27h    BYTE    initial external UART setup byte
  7152.  28h 24 BYTEs    available for user application
  7153. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  7154.       the clock chip
  7155. ----------1501-------------------------------
  7156. INT 15 - VMiX - "sys_chanreq" - I/O CHANNEL OBJECT MANAGER
  7157.     AH = 01h
  7158.     STACK:    WORD    object ID of requestor
  7159.         DWORD    pointer to ASCIZ name of requested method
  7160.             "assign" assign channel to object
  7161.             "deassign" deassign channel
  7162.             "cursor" set cursor on/off
  7163.             "init" initialize comm port
  7164.             "open" open I/O channel
  7165.             "position" set cursor position
  7166.             "receive" get buffered packet from comm port
  7167.             "send" send buffered packet to comm port
  7168.             "vio" set current virtual I/O to specified channel
  7169.             "window" make window at cursor position
  7170.         ---if "assign"---
  7171.          WORD    object UID
  7172.          WORD    caller UID/PID
  7173.          DWORD    CSL with port
  7174.         ---if "deassign"---
  7175.          WORD    channel ID
  7176.         ---if "cursor"---
  7177.          WORD    channel ID (must be a SRCSINK)
  7178.          WORD    new state (0000h off, 0001h on)
  7179.         ---if "init"---
  7180.          WORD    channel ID (must be a SRCSINK)
  7181.          WORD    comm port number (00h-03h)
  7182.          WORD    UART init code
  7183.         ---if "open"---
  7184.          WORD    channel ID
  7185.         ---if "position"---
  7186.          WORD    channel ID (must be a SRCSINK)
  7187.          WORD    position (high byte = row, low byte = column)
  7188.         ---if "receive"---
  7189.          DWORD    pointer to buffer
  7190.         ---if "send"---
  7191.          WORD    length of buffer
  7192.          DWORD    pointer to buffer
  7193.         ---if "vio"---
  7194.          WORD    channel ID (must be a SRCSINK)
  7195.         ---if "window"---
  7196.          WORD    top left (high byte = row, low byte = column)
  7197.          WORD    bottom right (high byte = row, low byte = column)
  7198. Return: DX:AX -> IRP structure or 0000h:0000h 
  7199. SeeAlso: AH=00h"VMiX",AH=02h"VMiX"
  7200. ----------1501-------------------------------
  7201. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
  7202.     AH = 01h
  7203.     AL = semaphore number (00h-3Fh)
  7204. Return: AH = status
  7205.         00h successful
  7206.         02h invalid semaphore number
  7207. Notes:    if the semaphore is not owned, ownership is assigned to the calling
  7208.       task and the call returns immediately
  7209.     if the semaphore is already owned by another task, the calling task
  7210.       is placed on a queue for the semaphore and suspended until it can
  7211.       become owner of the semaphore
  7212.     semaphore 0 is used internally by MultiDOS to synchronize DOS access
  7213. SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
  7214. ----------1502-------------------------------
  7215. INT 15 - CASSETTE - READ DATA
  7216.     AH = 02h
  7217.     CX = number of bytes to read
  7218.     ES:BX -> buffer
  7219. Return:    CF clear if successful
  7220.         DX = number of bytes read
  7221.         ES:BX -> byte following last byte read
  7222.     CF set on error
  7223.     AH = status
  7224.         00h successful
  7225.         01h CRC error
  7226.         02h bad tape signals
  7227.         04h no data
  7228.         80h invalid command
  7229.         86h no cassette present
  7230. SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
  7231. ----------1502-------------------------------
  7232. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  7233.     AH = 02h
  7234.     AL = NVRAM location (00h to 3Fh)
  7235. Return: AH = return code
  7236.         00h OK
  7237.         01h address bad
  7238.         02h checksum error
  7239.     AL = NVRAM data value
  7240. SeeAlso: AH=01h"Amstrad"
  7241. ----------1502-------------------------------
  7242. INT 15 - VMiX - "sys_memreq" - MEMORY OBJECT MANAGER
  7243.     AH = 02h
  7244.     STACK:    WORD    object ID of requestor
  7245.         DWORD    pointer to ASCIZ name of requested method
  7246.             "assign" allocate low memory block
  7247.             "assign extended" allocate extended memory pages
  7248.             "assign gdt" allocate GDT selector
  7249.             "paged" allocate low paged memory
  7250.             "paged extended" alllocate extended memory pages
  7251.             "deassign" free memory block
  7252.             "deassign gdt" free GDT selector
  7253.             "getvpage" get physical address for virtual page
  7254.             "setvpage" set physical address for virtual page
  7255.             "info" get VMiX memory usage info block
  7256.             "move" move contents of 32-bit memory
  7257.             "newmcb" make new DOS memory control block
  7258.             "owner" get process ID of MCB or PSP owner
  7259.             "umb" allocate upper memory block
  7260.             "video" toggle system use of vidoe memory and get stat
  7261.         ---if "assign"---
  7262.          WORD    number of objects
  7263.          WORD    size in bytes (multiple of 512 bytes)
  7264.         ---if "assign extended"---
  7265.          WORD    number of objects
  7266.          WORD    size in bytes (multiple of 4K)
  7267.         ---if "assign gdt"---
  7268.          WORD    access type (low byte)
  7269.          WORD    segment size in paragraphs
  7270.          DWORD    pointer to start of physical segment
  7271.         ---if "paged"---
  7272.          WORD    number of 512-byte pages
  7273.         ---if "paged extended"
  7274.          WORD    number of 4K pages
  7275.         ---if "deassign"---
  7276.          DWORD    pointer returned by previous allocation call
  7277.         ---if "deassign gdt"---
  7278.          WORD    GDT selector
  7279.         ---if "getvpage"---
  7280.          WORD    owner's process ID
  7281.          DWORD    pointer to buffer for page structure (struct VPGE)
  7282.         ---if "setvpage"---
  7283.          WORD    owner's process ID
  7284.          DWORD    pointer to new page structure (struct VPGE)
  7285.         ---if "info"---
  7286.          no additional arguments
  7287.         ---if "move"
  7288.          DWORD    32-bit source address
  7289.          DWORD    32-bit destination address
  7290.          WORD    number of words to move
  7291.         ---if "newmcb"---
  7292.          DWORD    pointer to new MCB's location
  7293.          WORD    size of memory block
  7294.          DWORD    pointer to ASCIZ name string (max 8 chars)
  7295.         ---if "owner"---
  7296.          WORD    MCB or PSP segment
  7297.         ---if "umb"---
  7298.          WORD    size in paragraphs
  7299.         ---if "video"---
  7300.          no additional arguments
  7301. Return: DX:AX -> memory block or VPGE struct or 0000h:0000h
  7302. SeeAlso: AH=00h"VMiX",AH=01h"VMiX"
  7303. ----------1502-------------------------------
  7304. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
  7305.     AH = 02h
  7306.     AL = semaphore number (00h-3Fh)
  7307. Return: AH = status
  7308.         00h successful
  7309.         01h not semaphore owner
  7310.         02h invalid semaphore number
  7311. Notes:    if any tasks are waiting for the semaphore, the first task on the wait
  7312.       queue will become the new owner and be reawakened
  7313.     do not use within an interrupt handler
  7314. SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
  7315. ----------1503-------------------------------
  7316. INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
  7317.     AH = 03h
  7318.     CX = number of bytes to write
  7319.     ES:BX -> data buffer
  7320. Return: CF clear if successful
  7321.         ES:BX -> byte following last byte written
  7322.     CF set on error
  7323.     AH = status (see AH=02h"CASSETTE")
  7324.     CX = 0000h
  7325. SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
  7326. ----------1503-------------------------------
  7327. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  7328.     AH = 03h
  7329.     AL = value (I,R,G,B bits)
  7330. SeeAlso: AH=04h"Amstrad"
  7331. ----------1503-------------------------------
  7332. INT 15 - VMiX - "sys_pinput" - PROMPTED CONSOLE INPUT
  7333.     AH = 03h
  7334.     STACK:    DWORD    pointer to ASCII prompt
  7335.         WORD    field outline character
  7336.         WORD    length of input field (max 7Fh)
  7337.         DWORD    address of pointer to input buffer
  7338. Return: AX = length of input (input buffer is padded with blanks)
  7339. SeeAlso: AH=04h"VMiX"
  7340. ----------1503-------------------------------
  7341. INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
  7342.     AH = 03h
  7343.     DX = number of time slices to remain suspended
  7344. Return: after specified interval has elapsed
  7345. Note:    when priority-based scheduling is in use, high-priority tasks should
  7346.       use this function to yield the processor
  7347. SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
  7348. ----------1504-------------------------------
  7349. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  7350.     AH = 04h
  7351.     ES:DI -> results buffer length 20h for System Parameter Table
  7352.     DS = segment containing ABIOS RAM extensions (zero if none)
  7353. Return: AH = 00h success: results at ES:DI
  7354.     CF set on failure
  7355. SeeAlso: AH=05h"ABIOS",C1h
  7356.  
  7357. Format of ABIOS System Parameter Table:
  7358. Offset    Size    Description
  7359.  00h    DWORD    FAR address of ABIOS Common Start Routine
  7360.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  7361.  08h    DWORD    FAR address of ABIOS Time-out Routine
  7362.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  7363.  0Eh 16 BYTEs    reserved
  7364.  1Eh    WORD    number of entries in initialization table
  7365. ----------1504-------------------------------
  7366. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  7367.     AH = 04h
  7368.     AL = value (RDSEL1 and RDSEL0)
  7369. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  7370. ----------1504-------------------------------
  7371. INT 15 - VMiX - "sys_vprintf" - FORMATTED OUTPUT TO STREAM
  7372.     AH = 04h
  7373.     STACK:    DWORD    control string
  7374.         DWORD    array of arguments
  7375. SeeAlso: AH=03h"VMiX"
  7376. ----------1504-------------------------------
  7377. INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
  7378.     AH = 04h
  7379.     AL = mailbox number (00h-3Fh)
  7380.     CX = message length in bytes
  7381.     DS:SI -> message
  7382. Return: AH = status
  7383.         00h successful
  7384.         01h out of message memory
  7385.         02h invalid mailbox number
  7386. Note:    the message is copied into a system buffer; the caller may immediately
  7387.       reuse its buffer
  7388. SeeAlso: AH=05h"MultiDOS"
  7389. ----------1505-------------------------------
  7390. INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
  7391.     AH = 05h
  7392.     ES:DI -> results buffer length (18h * Number_of_Entries)
  7393.     DS = segment containing ABIOS RAM extensions (zero if none)
  7394. Return: AH = 00h success: results at ES:DI
  7395.     CF set on failure
  7396. SeeAlso: AH=04h"ABIOS",C1h
  7397.  
  7398. Format of one entry of ABIOS Initialization Table:
  7399. Offset    Size    Description
  7400.  00h    WORD    device ID
  7401.  02h    WORD    number of Logical IDs
  7402.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  7403.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  7404.  0Ah    WORD    request block length
  7405.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  7406.  0Eh    WORD    Data Pointers length (in Common Data Area)
  7407.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  7408.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  7409.  12h  6 BYTEs    reserved
  7410. ----------1505-------------------------------
  7411. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  7412.     AH = 05h
  7413.     AL = value (I,R,G,B bits)
  7414. SeeAlso: AH=04h"Amstrad"
  7415. ----------1505-------------------------------
  7416. INT 15 - VMiX - "sys_getpid" - GET PROCESS ID OF CURRENT PROCESS
  7417.     AH = 05h
  7418. Return: AX = process ID
  7419. SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
  7420. ----------1505-------------------------------
  7421. INT 15 - MultiDOS Plus - CHECK MAILBOX
  7422.     AH = 05h
  7423.     AL = mailbox number (00h-3Fh)
  7424. Return: AH = status
  7425.         00h successful
  7426.         DX = length of first message in queue, 0000h if no message
  7427.         02h invalid mailbox number
  7428. SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
  7429. ----------1506-------------------------------
  7430. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  7431.     AH = 06h
  7432. Return: BX = version number
  7433. ----------1506-------------------------------
  7434. INT 15 - VMiX - "sys_getpcb" - GET POINTER TO PROCESS CONTROL BLOCK
  7435.     AH = 06h
  7436.     STACK:    WORD    process ID
  7437. Return: DX:AX -> process control block
  7438. SeeAlso: AH=05h"VMiX",AH=07h"VMiX",AH=08h"VMiX"
  7439. ----------1506-------------------------------
  7440. INT 15 - MultiDOS Plus - READ MAILBOX
  7441.     AH = 06h
  7442.     AL = mailbox number (00h-3Fh)
  7443.     CX = size of buffer in bytes
  7444.     ES:DI -> buffer for message
  7445. Return: AH = status
  7446.         00h successful
  7447.         CX = number of bytes copied
  7448.         DX = actual length of message
  7449.         02h invalid mailbox number
  7450. Note:    if the caller's buffer is not large enough, the message is truncated
  7451.       and the remainder is lost
  7452. SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
  7453. ----------1507-------------------------------
  7454. INT 15 - VMiX - "sys_getocb" - GET POINTER TO OBJECT CONTROL BLOCK
  7455.     AH = 07h
  7456.     STACK:    WORD    object type
  7457. Return: DX:AX -> object control block
  7458. SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
  7459. ----------1507-------------------------------
  7460. INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
  7461.     AH = 07h
  7462.     BX:CX = entry point of new task
  7463.     DX = stack size in paragraphs
  7464. Return: AH = status
  7465.         00h successful
  7466.         01h no free task control blocks
  7467.         02h no free memory for task's stack
  7468. Note:    execution returns immediately to calling task
  7469. SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
  7470. ----------1508-------------------------------
  7471. INT 15 - VMiX - "sys_getccb" - GET CHANNEL CONTROL BLOCK
  7472.     AH = 08h
  7473.     STACK:    WORD    channel ID
  7474. Return: DX:AX -> channel control block
  7475. SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
  7476. ----------1508-------------------------------
  7477. INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
  7478.     AH = 08h
  7479. Return: calling task terminated, so execution never returns to caller
  7480. Notes:    an internal task must be terminated with this function rather than a
  7481.       DOS termination function
  7482.     task's stack space is returned to parent task's memory pool
  7483. SeeAlso: AH=07h"MultiDOS"
  7484. ----------1509-------------------------------
  7485. INT 15 - VMiX - "sys_getqueue" - GET ID OF QUEUED ELEMENT
  7486.     AH = 09h
  7487.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  7488.         WORD    subqueue ID
  7489. Return: AX = queue ID
  7490. SeeAlso: AH=0Ah"VMiX"
  7491. ----------1509-------------------------------
  7492. INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
  7493.     AH = 09h
  7494.     AL = new priority
  7495. Note:    the priority has different meanings depending on whether priority-
  7496.       based or round-robin scheduling is used
  7497. SeeAlso: AH=07h"MultiDOS"
  7498. ----------150A-------------------------------
  7499. INT 15 - VMiX - "sys_qetqnext" - GET ID OF NEXT QUEUED ELEMENT
  7500.     AH = 0Ah
  7501.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  7502.         WORD    ID of current element in queue chain
  7503. Return: AX = ID of next element
  7504. SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
  7505. ----------150A-------------------------------
  7506. INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
  7507.     AH = 0Ah
  7508.     AL = new interval
  7509.         00h = 55.0 ms (default)
  7510.         80h = 27.5 ms
  7511.         40h = 13.75 ms
  7512.         20h = 6.88 ms
  7513.         10h = 3.44 ms
  7514.         08h = 1.72 ms
  7515. SeeAlso: AH=03h"MultiDOS"
  7516. ----------150B-------------------------------
  7517. INT 15 - VMiX - "sys_sysreq" - SYSTEM CONFIGURATION MANAGER
  7518.     AH = 0Bh
  7519.     STACK:    WORD    caller's UID
  7520.         DWORD    pointer to ASCIZ name of requested method
  7521.             "abort" abort current send/receive on comm port
  7522.             "block" start/end critical section
  7523.             "close" terminate interrupt-drive comm I/O
  7524.             "open" prepare comm port for interrupt-driven I/O
  7525.             "delay" set delay timer and wait
  7526.             "hibernate" put process to sleep
  7527.             "ints" enable/disable interrupt-driven INT 14h
  7528.             "length" get current send/receive buffer offsets
  7529.             "kswitch" switch stacks
  7530.             "numproc" get number of active processes
  7531.             "protocol" set protocol function for comm interrupts
  7532.             "relocate" set/reset VMiX flag for relocating to himem
  7533.             "status" get current open comm port status
  7534.             "wake" awaken a process
  7535.             "xport" get comm port polled for logins
  7536.         ---if "abort"---
  7537.          no additional arguments
  7538.         ---if "block"---
  7539.          WORD    0000h end, 0001h start
  7540.         ---if "close"---
  7541.          no additional arguments
  7542.         ---if "open"---
  7543.          WORD    comm port (00h-03h)
  7544.          WORD    BIOS parameter byte (see INT 14/AH=00h), except
  7545.             bits 7-5 = 000 for 19200, 001 for 38400, 011 for 115200
  7546.         ---if "delay"---
  7547.          WORD    time in seconds
  7548.         ---if "hibernate"---
  7549.          WORD    process ID
  7550.         ---if "ints"---
  7551.          WORD    0000h if no, 0001h if yes
  7552.         ---if "length","numproc","relocate","status","xport"---
  7553.          no additional arguments
  7554.         ---if "kswitch"---
  7555.          DWORD    pointer to new stack
  7556.         ---if "protocol"---
  7557.          DWORD    pointer to function (must be in low "assign"ed memory
  7558.             when in 386 mode)
  7559.         ---if "wake"---
  7560.          WORD    process ID
  7561. Return: DX:AX -> result or 0000h:0000h
  7562.         ---if "length"---
  7563.          BYTE    receive offset
  7564.          BYTE    send offset
  7565.         ---if "kswitch"---
  7566.          DWORD    old stack pointer
  7567.         ---if "numproc"---
  7568.          WORD    number of active processes
  7569.         ---if "status"---
  7570.          current open comm port status
  7571.         ---if "xport"---
  7572.          current comm port being polled for logins
  7573. SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
  7574. ----------150B-------------------------------
  7575. INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
  7576.     AH = 0Bh
  7577. Notes:    sets calling task's screen pointer to actual screen memory; the pointer
  7578.       may be restored with AH=0Ch
  7579.     caller's video mode must be same as foreground task's video mode
  7580.     any text written while in the background will be saved to the
  7581.       foreground task's virtual screen when it switches to the background
  7582.     useful if a background task wants to display a message on the
  7583.       foreground screen
  7584. SeeAlso: AH=0Ch"MultiDOS"
  7585. ----------150C-------------------------------
  7586. INT 15 - VMiX - "sys_getstack" - GET POINTER TO PROCESS TSS STACK
  7587.     AH = 0Ch
  7588.     STACK:    WORD    process ID
  7589. Return: DX:AX -> TSS stack store
  7590. SeeAlso: AH=00"VMiX"
  7591. ----------150C-------------------------------
  7592. INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
  7593.     AH = 0Ch
  7594. Note:    restores task's screen pointer saved by AH=0Bh; must not be called
  7595.       unless AH=0Bh has been called first
  7596. SeeAlso: AH=0Bh"MultiDOS"
  7597. ----------150D-------------------------------
  7598. INT 15 - VMiX - "sys_spawn" - START A CHILD PROCESS JOB SHELL
  7599.     AH = 0Dh
  7600.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  7601.             followed by standard VMiX shell command string
  7602. Return: AX = process ID or error code "SYS_ERROR"
  7603. Note:    the maximum string length is 7Fh characters
  7604. SeeAlso: AH=0Eh"VMIX",AH=11h"VMiX",INT 21/AH=4Bh
  7605. ----------150D-------------------------------
  7606. INT 15 - MultiDOS Plus - DISABLE MULTITASKING
  7607.     AH = 0Dh
  7608. Note:    calling task receives all time slices until AH=0Eh is called; this
  7609.       allows time-critical events or nonreentrant code to be processed
  7610. SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
  7611. ----------150E-------------------------------
  7612. INT 15 - VMiX - "sys_kill" - HARD TERMINATE PROCESS
  7613.     AH = 0Eh
  7614.     STACK:    WORD    process ID
  7615. Return: AX = status (SYS_OK or SYS_ERROR)
  7616. SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
  7617. ----------150E-------------------------------
  7618. INT 15 - MultiDOS Plus - ENABLE MULTITASKING
  7619.     AH = 0Eh
  7620. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
  7621. ----------150F-------------------------------
  7622. INT 15 C - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  7623.     AH = 0Fh
  7624.     AL = phase code
  7625.         00h reserved
  7626.         01h surface analysis
  7627.         02h formatting
  7628. Return: CF clear if formatting should continue, set if it should terminate
  7629. Note:    called during ESDI drive formatting after each cylinder is completed
  7630. SeeAlso: INT 13/AH=1Ah
  7631. ----------150F-------------------------------
  7632. INT 15 - VMiX - "sys_getqkey" - GET KEY FIELD OF QUEUED ELEMENT
  7633.     AH = 0Fh
  7634.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  7635.         WORD    ID of element in queue chain
  7636. Return: AX = key
  7637. SeeAlso: AH=0Ah"VMiX"
  7638. ----------150F-------------------------------
  7639. INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
  7640.     AH = 0Fh
  7641.     DS:BX -> ASCIZ command
  7642. Return: after command has been processed
  7643. Notes:    specified string is executed as if it had been typed at the MultiDOS
  7644.       command prompt
  7645.     the task is placed on a queue which MultiDOS examines periodically and
  7646.       is suspended until MultiDOS has processed the command
  7647.     all lowercase characters up to the first blank are converted to upper
  7648.       case within the given buffer
  7649. ----------1510-------------------------------
  7650. INT 15 - VMiX - "sys_virtual" - EXECUTE CONFORMING FUNCTION IN PROTECTED MODE
  7651.     AH = 10h
  7652.     STACK:    DWORD    pointer to function
  7653.           N    WORDs    function args
  7654. Return: AX = function's return value??? (not specified in documentation)
  7655. Note:    while the function is executing, the following global descriptors are
  7656.       available:
  7657.         20h stack segment
  7658.         38h code segment of function
  7659.         40h data alias for function's code segment
  7660.       additional GDT descriptors can be allocated using AH=02h with
  7661.       function "assign gdt"
  7662. SeeAlso: AH=02h"VMiX",AH=51h"VMiX"
  7663. ----------1510-------------------------------
  7664. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  7665.     AH = 10h
  7666.     AL = semaphore number (00h-3Fh)
  7667. Return: AH = status
  7668.         00h semaphore not in use
  7669.         01h semaphore owned by another task
  7670.         02h invalid semaphore number
  7671.         03h semaphore owned by caller
  7672. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  7673. ----------151000-----------------------------
  7674. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  7675.     AX = 1000h
  7676. Return: after other processes run
  7677. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  7678.       the current time-slice is set to expire at the next clock tick rather
  7679.       than immediately
  7680. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
  7681. SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
  7682. SeeAlso: INT 7F/AH=E8h
  7683. ----------151001-----------------------------
  7684. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  7685.     AX = 1001h
  7686.     BX = number of bytes to allocate
  7687. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  7688.     AX = status (DV v2.42)
  7689.         0000h successful
  7690.         0001h failed
  7691. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  7692.       common memory.  Under DV v2.42, this call never generates a user
  7693.       prompt regardless of the SETERROR value; instead, it always returns
  7694.       AX=0001h and ES:DI=0000h:0000h if out of memory
  7695. SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
  7696. ----------151002-----------------------------
  7697. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  7698.     AX = 1002h
  7699.     ES:DI -> previously allocated block
  7700. Return: block freed
  7701. SeeAlso: AX=1001h,AX=DE0Dh
  7702. ----------151003-----------------------------
  7703. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  7704.     AX = 1003h
  7705.     BH = attribute
  7706.     BL = character
  7707.     DX = segment of object handle for window
  7708. Note:    BX=0 does not display anything, it only positions the hardware cursor
  7709. ----------1510-------------------------------
  7710. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  7711.     AH = 10h
  7712.     AL = 04h thru 12h
  7713. Return: pops up "Programming error" window in DV 2.x
  7714. ----------151013-----------------------------
  7715. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  7716.     AX = 1013h
  7717.     ES:DI -> FAR service routine
  7718. Return: BX = bit mask indicating which bit was allocated
  7719.          0000h if no more bits available
  7720. SeeAlso: AX=1014h,AX=1015h
  7721. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  7722.       interrupt; if other calls need to be made, the interrupt handler
  7723.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  7724. ----------151014-----------------------------
  7725. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  7726.     AX = 1014h
  7727.     BX = bit mask from INT 15/AX=1013h
  7728. SeeAlso: AX=1013h,AX=1015h
  7729. ----------151015-----------------------------
  7730. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  7731.     AX = 1015h
  7732.     BX = bit mask for interrupts to post
  7733. Return: indicated routines will be called: (DV 2.0x) at next task switch
  7734.                        (DV 2.2x) immediately on return from
  7735.                              hardware interrupt
  7736. SeeAlso: AX=1013h,AX=1014h
  7737. Notes:    this is one of the few TopView calls which are allowed from a hardware
  7738.       interrupt handler
  7739.     the handler will be called with ES containing the segment of the handle
  7740.       of the next task to be executed; on return, ES must be the segment of
  7741.       a task handle
  7742. ----------151016-----------------------------
  7743. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  7744.     AX = 1016h
  7745.     ES:DI = possible object handle
  7746. Return: BX = FFFFh if ES:DI is a valid object handle
  7747.          0000h if ES:DI is not
  7748. Note:    under DESQview versions prior to 2.50, an object handle is always a
  7749.       pointer to the object; for versions 2.50 and up, only task handles
  7750.       are always pointers (other handles may consist of a unique object
  7751.       number and offset into DESQview's common memory)
  7752. SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
  7753.  
  7754. Format of object:
  7755. Offset    Size    Description
  7756.  00h    WORD    offset in common memory of previous object of same type
  7757.  02h    WORD    offset in common memory of next object of same type
  7758.  04h    WORD    signature FEDCh (DV 2.42-)
  7759.         signature FEDCh or object number (DV 2.50+)
  7760.  06h    WORD    object type
  7761.         00h window/task
  7762.         01h mailbox
  7763.         02h keyboard
  7764.         03h timer
  7765.         04h pointer
  7766.         05h panel
  7767.         06h objectq
  7768.  08h    DWORD    object handle to return to caller
  7769.  0Ch    DWORD    canonicalized object address (segment = common memory)
  7770.  10h    WORD    offset in common memory of owning task
  7771.  12h    WORD    mapping context
  7772.     remainder varies by object type and DESQview version
  7773. ---v2.42 keyboard object---
  7774.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  7775.         bit 15: keyboard opened
  7776.  16h  4 BYTEs    ???
  7777.  1Ah    WORD    priority in OBJECTQ???
  7778.  1Ch    ...
  7779.  25h    WORD    offset in common memory of ??? task
  7780.  27h  4 BYTEs    ???
  7781. ---v2.42 objectq object---
  7782.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  7783.         bit 15: OBJECTQ opened
  7784.  16h  2 BYTEs    ???
  7785.  18h    WORD    offset in common memory of ??? task
  7786.  1Ah  6 BYTEs    ???
  7787. ---v2.42 mailbox object---
  7788.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  7789.         bit 15: mailbox opened
  7790.  1Ah    WORD    priority in OBJECTQ???
  7791.  1Ch  6 BYTEs    ???
  7792.  22h    WORD    offset in common memory of mailbox name (counted string)
  7793.         0000h if no name
  7794.      <= 5 BYTEs    ???
  7795. ---v2.22-2.42 window/task object---
  7796.  14h    BYTE    00h window, 01h task
  7797.  15h    BYTE    internal (not Switch menu) window number???
  7798.  16h    BYTE    internal (not Switch menu) window number???
  7799.  17h    WORD    segment of internal window record
  7800.  19h  2 BYTEs    ???
  7801.  1Bh    BYTE    cursor row
  7802.  1Ch    BYTE    cursor column
  7803.  1Dh  2 BYTEs    ???
  7804.  1Fh    BYTE    window height (logical)
  7805.  20h    BYTE    window width (logical)
  7806.  21h    BYTE    window position, row
  7807.  22h    BYTE    window position, column
  7808.  23h    BYTE    window height (visible)
  7809.  24h    BYTE    window width (visible)
  7810.  25h    BYTE    row of top of frame (or window if unframed)
  7811.  26h    BYTE    column of left of frame (or window if unframed)
  7812.  27h    BYTE    window height (physical, including frame)
  7813.  28h    BYTE    window width (physical, including frame)
  7814.  29h 10 BYTEs    ???
  7815.  33h    BYTE    minimum height of window
  7816.  34h    BYTE    minimum width of window
  7817.  35h    BYTE    maximum height of window
  7818.  36h    BYTE    maximum width of window
  7819.  37h  3 BYTEs    ???
  7820.  3Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  7821.  42h 24 BYTEs    attributes???
  7822.  5Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  7823.  62h  6 BYTEs    ???
  7824.  68h    WORD    offset in common memory of window name or 0000h if untitled
  7825.  6Ah    WORD    length of window name
  7826.  6Ch  2 BYTEs    ???
  7827.  6Eh    WORD    offset of logical cursor in window (in character cells)
  7828.  70h    DWORD    pointer to field table for window
  7829.  74h  3 BYTEs    ???
  7830.  77h    BYTE    number of last-visited field
  7831.  78h    DWORD    pointer to field table entry for last-visited field
  7832.  7Ch  3 BYTEs    ???
  7833.  7Fh    BYTE    select field marker character
  7834.  80h    BYTE    ??? bit flags
  7835.         bit 0: allow ECh window stream opcode to change reverse logattr
  7836.         bit 1: alternate field processing mode selected
  7837.  81h    BYTE    ???
  7838.  82h    DWORD    notification function (manager stream opcode 8Ah)
  7839.         no notification if segment = 0000h
  7840.  86h    DWORD    notification argument (manager stream opcode 8Bh)
  7841.  8Ah    WORD    offset in common memory of ??? window object or 0000h
  7842.  8Ch    WORD    offset in common memory of ??? window object or 0000h
  7843.  8Eh    WORD    offset in common memory of ??? window object or 0000h
  7844.  8Ch  6 BYTEs    ???
  7845.  ---task object only
  7846.  92h 11 BYTEs    ???
  7847.  9Bh    BYTE    ??? bit flags
  7848.         bit 3: ???
  7849.         bit 6: perform protected-attribute processing on select fields
  7850.  9Ch    BYTE    ???
  7851.  9Dh    WORD    offset in common memory of current register save record
  7852.         (see below).  No register save record in use if < 01C0h
  7853.  9Fh    WORD    offset in common memory of task's keyboard object
  7854.  A1h    WORD    offset in common memory of task's OBJECTQ object
  7855.  A3h    WORD    offset in common memory of task's mailbox object
  7856.  A5h    WORD    semaphore: FFFFh if on user stack, else on task's private stack
  7857.  A7h    DWORD    user's SS:SP
  7858.  ABh    WORD    task's private SP (SS read from offset 0Ah)
  7859.  ADh  6 BYTEs    ???
  7860.  B3h    BYTE    ??? bit flags
  7861.         bit 0: run in foreground only
  7862.  B4h  2 BYTEs    ???
  7863.  B6h    BYTE    task status (see AX=DE2Ch)
  7864.  B7h  9 BYTEs    ???
  7865.  C0h    WORD    head pointer for keyboard buffer (wraps back to 00h after 80h)
  7866.  C2h    WORD    tail pointer for keyboard buffer (wraps back to 00h after 80h)
  7867.  C4h  2 BYTEs    ??? (0000h)
  7868.  C6h    WORD    segment of keyboard buffer for task
  7869.  C8h    WORD    offset in common memory of ??? keyboard object
  7870.  CAh    BYTE    ???
  7871.  CBh    WORD    offset in common memory of ??? object
  7872.  CEh    BYTE    ??? flag
  7873.  CFh    WORD    offset in common memory of default notify window for task
  7874.         or 0000h if none
  7875.  D1h  4 BYTEs    ???
  7876.  D5h    BYTE    window number on Switch Window menu
  7877.  D6h  5 BYTEs    ???
  7878.  DBh    WORD    offset in common memory of ??? object
  7879.  DDh  2 BYTEs    ???
  7880.  DFh    WORD    API level for task
  7881.  E1h    WORD    offset in common memory of ??? keyboard object
  7882.  E7h    WORD    segment of ???
  7883.  FDh    BYTE    ???
  7884. 119h    DWORD    SS:SP for ???
  7885. 11Dh  4 BYTEs    ???
  7886. 121h    DWORD    pointer to ???
  7887. 125h 35 BYTEs    ???
  7888. ---v2.22
  7889. 145h        task's default keyboard object
  7890. ---v2.42
  7891. 148h    WORD    ???
  7892. 14Ah    BYTE    ???
  7893. 14Dh 42 BYTEs    task's default keyboard object
  7894. 177h 32 BYTEs    task's ObjectQ object
  7895. 197h 41 BYTEs    task's default mailbox object
  7896. 1C0h 24 BYTEs    first register save record
  7897. 450h    --    default top of private stack
  7898.  
  7899. Format of Register Save Record:
  7900. Offset    Size    Description
  7901.  00h    WORD    AX
  7902.  02h    WORD    BX
  7903.  04h    WORD    CX
  7904.  06h    WORD    DX
  7905.  08h    WORD    DI
  7906.  0Ah    WORD    SI
  7907.  0Eh    WORD    DS
  7908.  10h    WORD    ES
  7909.  12h    DWORD    return address
  7910.  16h    WORD    original flags
  7911. ----------151017-----------------------------
  7912. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  7913.     AX = 1017h
  7914. Return: pops up "Programming error" window in DV 2.x
  7915. ----------151018-----------------------------
  7916. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  7917.     AX = 1018h
  7918.     BH = column
  7919.     BL = row
  7920.     ES = segment of object handle for window below which to search
  7921.          0000h = start search with topmost window
  7922. Return: ES = segment of object handle for window which is visible at the
  7923.            indicated position, or covered by indicated window
  7924.        = 0000h no window
  7925. SeeAlso: AX=1023h,AX=1024h
  7926. ----------151019-----------------------------
  7927. INT 15 - TopView - "SOUND" - MAKE TONE
  7928.     AX = 1019h
  7929.     BX = frequency in Hertz (0000h = silence)
  7930.     CX = duration in clock ticks (18.2 ticks/sec)
  7931. Return: immediately, tone continues to completion
  7932. Notes:    if another tone is already playing, the new tone does not start until
  7933.       completion of the previous one.  Up to 32 tones may be queued before
  7934.       the process is blocked until a note completes.
  7935.     in DV 2.00, the lowest tone allowed is 20 Hz
  7936.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  7937.       notes are also cancelled
  7938. SeeAlso: INT 16/AH=73h
  7939. ----------15101A-----------------------------
  7940. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  7941.     AX = 101Ah
  7942. Return: stack switched
  7943. Notes:    this call may not be nested; a second call must be preceded by a call
  7944.       to "USTACK" (AX=1025h)
  7945.     while TopView requires many API calls to be executed while on the
  7946.       task's internal stack, DESQview allows those calls to be executed
  7947.       regardless of the current stack
  7948. SeeAlso: AX=1025h
  7949. ----------15101B-----------------------------
  7950. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  7951.     AX = 101Bh
  7952. Return: task-switching temporarily disabled
  7953. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  7954.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  7955.       will again be disabled)
  7956.     suspends the caller until DOS is free
  7957. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  7958. SeeAlso: INT 60/DI=0602h
  7959. ----------15101C-----------------------------
  7960. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  7961.     AX = 101Ch
  7962. Return: task-switching enabled
  7963. Note:    this API call may be made from within a hardware interrupt handler
  7964. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  7965. ----------15101D-----------------------------
  7966. INT 15 - TopView - "STOP" - STOP TASK
  7967.     AX = 101Dh
  7968.     ES = segment of object handle for task to be stopped
  7969.          (== handle of main window for that task)
  7970. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  7971. Note:    once a task has been stopped, additional "STOP"s are ignored
  7972. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  7973.       current task
  7974. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
  7975. ----------15101E-----------------------------
  7976. INT 15 - TopView - "START" - START TASK
  7977.     AX = 101Eh
  7978.     ES = segment of object handle for task to be started
  7979.          (== handle of main window for that task)
  7980. Return: indicated task is started up again
  7981. Note:    once a task has been started, additional "START"s are ignored
  7982. SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
  7983. ----------15101F-----------------------------
  7984. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  7985.     AX = 101Fh
  7986.     BX = bit fields
  7987.          bits 0-12: number of characters to display
  7988.          bits 13,14: which mouse button may be pressed to remove window
  7989.              00 = either
  7990.              01 = left
  7991.              10 = right
  7992.              11 = either
  7993.          bit 15: beep if 1
  7994.     ES:DI -> text of message
  7995.     CH = width of error window (0 = default)
  7996.     CL = height of error window (0 = default)
  7997.     DX = segment of object handle
  7998. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  7999. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  8000. ----------151020-----------------------------
  8001. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  8002.     AX = 1020h
  8003. Return: pops up "Programming error" window in DV v2.00+
  8004. ----------151021-----------------------------
  8005. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  8006.     AX = 1021h
  8007.     BX = segment of object handle for task to interrupt (not self)
  8008.     DX:CX -> FAR routine to jump to next time task is run
  8009. Return: nothing
  8010. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  8011.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  8012.       needs to be preserved
  8013.     multiple PGMINTs to a single task are processed last-in first-out
  8014.     if the other task is in a DOS or DV API call, the interruption will
  8015.       occur on return from that call
  8016. ----------151022BX0000-----------------------
  8017. INT 15 - TopView - "GETVER" - GET VERSION
  8018.     AX = 1022h
  8019.     BX = 0000h
  8020. Return: BX nonzero, TopView or compatible loaded
  8021.     (BL = major version, BH = minor version)
  8022. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  8023. ----------151023-----------------------------
  8024. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  8025.     AX = 1023h
  8026.     BX = segment of object handle for parent window within which to
  8027.          position the window (0 = full screen)
  8028.     ES = segment of object handle for window to be positioned
  8029.     DL = bit flags
  8030.          bits 0,1: horizontal position
  8031.         00 = current
  8032.         01 = center
  8033.         10 = left
  8034.         11 = right
  8035.          bits 2,3: vertical position
  8036.         00 = current
  8037.         01 = center
  8038.         10 = top
  8039.         11 = bottom
  8040.          bit 4: don't redraw screen if set
  8041.          bits 5-7 not used
  8042.     CH = number of columns to offset from position specified by DL
  8043.     CL = number of rows to offset from position specified by DL
  8044. Return: nothing
  8045. ----------151024-----------------------------
  8046. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  8047.     AX = 1024h
  8048.     BX = segment of object handle for window
  8049.           (0 = use default)
  8050. Return: ES:DI -> virtual screen
  8051.     CX = size of virtual screen in bytes
  8052.     DL = 00h text screen
  8053.          01h graphics screen
  8054. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  8055. ----------151025-----------------------------
  8056. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  8057.     AX = 1025h
  8058. Return: stack switched back
  8059. Notes:    call only after having switched to internal stack with AX=101Ah
  8060.     while TopView requires many API calls to be executed while on the
  8061.       task's private stack, DESQview allows those calls to be executed
  8062.       regardless of the current stack
  8063. SeeAlso: AX=101Ah
  8064. ----------1510-------------------------------
  8065. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  8066.     AH = 10h
  8067.     AL = 26h thru 2Ah
  8068. Return: pops up "Programming error" window in DV 2.x
  8069. ----------15102B-----------------------------
  8070. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  8071.     AX = 102Bh
  8072.     BX = segment of object handle for task
  8073. Return: nothing
  8074. Note:    forces a task which is waiting on its objectq to continue by placing
  8075.       the handle for the task on the objectq
  8076. SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
  8077. ----------15102C-----------------------------
  8078. INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
  8079.     AX = 102Ch
  8080.     ES:DI -> contents of .PIF/.DVP file (see below)
  8081.     BX = size of .PIF/.DVP info
  8082. Return: BX = segment of object handle for new task
  8083.          0000h on error
  8084. SeeAlso: AX=DE24h,INT 21/AH=4Bh
  8085.  
  8086. Format of .PIF/.DVP file:
  8087. Offset    Size    Description
  8088.  00h    BYTE    reserved (0)
  8089.  01h    BYTE    checksum of bytes 02h through 170h
  8090.  02h 30 BYTEs    blank-padded program title
  8091.  20h    WORD    maximum memory to allocate to partition in K
  8092.  22h    WORD    minimum memory required in K
  8093.  24h 64 BYTEs    ASCIZ program pathname
  8094.  64h    BYTE    default drive letter ('A',...)
  8095.  65h 64 BYTEs    ASCIZ default directory name
  8096.  A5h 64 BYTEs    ASCIZ program parameters
  8097.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  8098.  E6h    BYTE    number of text pages used
  8099.  E7h    BYTE    number of first interrupt to save
  8100.  E8h    BYTE    number of last interrupt to save
  8101.  E9h    BYTE    rows in virtual screen buffer
  8102.  EAh    BYTE    columns in virtual screen buffer
  8103.  EBh    BYTE    initial window position, row
  8104.  ECh    BYTE    initial window position, column
  8105.  EDh    WORD    system memory in K
  8106.  EFh 64 BYTEs    ASCIZ shared program name
  8107. 12Fh 64 BYTEs    ASCIZ shared program data file
  8108. 16Fh    BYTE    flags1
  8109.         bit 7: writes text directly to screen
  8110.         bit 6: runs in foreground only
  8111.         bit 5: uses math coprocessor
  8112.         bit 4: accesses system keyboard buffer directly
  8113.         bits 3-1: reserved (0)
  8114.         bit 0: swappable
  8115. 170h    BYTE    flags2
  8116.         bit 6: uses command-line parameters in field at A5h
  8117.         bit 5: swaps interrupt vectors
  8118. ---information unique to .DVP files---
  8119. 171h  2 BYTEs    keys to use on open menu
  8120. 173h    WORD    size of script buffer in bytes
  8121. 175h    WORD    automatically give up CPU after this many tests for keyboard
  8122.         input in one clock tick (default 0 = never)
  8123. 177h    BYTE    nonzero = "uses own colors"
  8124. 178h    BYTE    nonzero if application swappable
  8125. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  8126.         in actual .DVP files, frequently 01h
  8127. 17Ch    BYTE    nonzero to automatically close on exit (see also offset 18Bh)
  8128. 17Dh    BYTE    nonzero if copy-protect floppy is required
  8129. ---information unique to DESQview 2.0+---
  8130. 17Eh    BYTE    .DVP version number
  8131.         00h DESQview v1.2+
  8132.         01h DESQview v2.0+
  8133.         02h DESQview v2.2+
  8134. 17Fh    BYTE    reserved (0)
  8135. 180h    BYTE    initial number of rows in physical window
  8136. 181h    BYTE    initial number of columns in physical window
  8137. 182h    WORD    maximum expanded memory to allow, in K
  8138. 184h    BYTE    flags3
  8139.         bit 7: automatically assign window position
  8140.         bit 5: maximum memory value has been specified
  8141.         bit 4: disallow "Close" command
  8142.         bit 3: foreground-only when doing graphics
  8143.         bit 2: don't virtualize
  8144.         bit 1: ??? set by DV 2.31 when "Runs in Background" = "D"
  8145. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  8146. 186h    BYTE    number of graphics pages used
  8147. 187h    WORD    extra system memory size
  8148. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  8149. ---information unique to DESQview 2.2+---
  8150. 18Ah    BYTE    serial port usage
  8151.         FFh uses all serial ports
  8152.         00h no serial ports
  8153.         01h only COM1
  8154.         02h only COM2
  8155. 18Bh    BYTE    flags4
  8156.         bit 7: automatically close application on exit if .COM or .EXE
  8157.             specified (see also offset 17Ch)
  8158.         bit 6: swappable if not using serial ports
  8159.         bit 5: start program with window hidden (v2.26+)
  8160.         bit 4: start program in background (v2.26+)
  8161.         bit 3: virtualize text
  8162.         bit 2: virtualize graphics
  8163.         bit 1: share CPU when foreground
  8164.         bit 0: share EGA when foreground and zoomed
  8165. 18Ch    BYTE    protection level for 386 machines
  8166. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  8167. ---information unique to DESQview/X 1.0---
  8168. 18Dh    BYTE    X flags
  8169.         bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
  8170.                (NEWPROC) inherit DOS client layer usage
  8171.         bit 1: don't display DOS window
  8172.         bit 2: don't display wait message when opening window
  8173.         bits 3-7: unused (0)
  8174. 18Eh    BYTE    X keyboard behavior (0-3)
  8175. 18Fh    BYTE    font scaling
  8176.         00h fixed fonts
  8177.         01h scalable fonts
  8178. 190h 10 BYTEs    reserved (0)
  8179. 19Ah    WORD    length of data follownig XDVP signature
  8180. 19Ch  4 BYTEs    signature "XDVP"
  8181. 1A0h  N BYTEs    list of variable length records (see below)
  8182.  
  8183. Format of variable length record:
  8184. Offset    Size    Description
  8185.  00h    WORD    length of following record, 0000h if end of record list
  8186.  02h    BYTE    record type
  8187.         01h script filename, up to 64 characters
  8188.         02h command-line parameters (allows >64 characters on cmdline)
  8189.         03h environment inheritance
  8190.         04h environment string
  8191.         05h starting window position
  8192. ---types 01h,02h,04h---
  8193.  03h  N BYTEs    ASCII data
  8194. ---type 03h---
  8195.  03h    BYTE    inheritance
  8196.         00h do not inherit
  8197.         01h inherit environment
  8198. ---type 05h---
  8199.  03h  N BYTEs    ASCII copy of fields as typed into DVPMAN, separated by commas:
  8200.         starting row, starting column, starting height, starting width
  8201. Note:    if there are multiple occurrences of record types 01h, 02h, or 03h,
  8202.       only the last instance of each type is used; multiple occurrences of
  8203.       type 04h are concatenated
  8204. ----------15102D-----------------------------
  8205. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  8206.     AX = 102Dh
  8207.     BL = subfunction
  8208.          00h determine whether using keyboard mouse
  8209.         Return: BL = 00h using real mouse
  8210.                  01h using keyboard mouse
  8211.          01h turn keyboard mouse on
  8212.          02h turn keyboard mouse off
  8213. ----------15102E-----------------------------
  8214. INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
  8215.     AX = 102Eh
  8216.     BX = number of bytes
  8217. Return: AX = status
  8218.         0000h successful
  8219.         ES:DI -> allocated system memory
  8220.         0001h failed
  8221.         ES:DI = 0000h:0000h
  8222. Note:    under DV 2.42, this call is identical to AX=1001h
  8223. SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
  8224.  
  8225. Format of system memory block header (one paragraph before memory block):
  8226. Offset    Size    Description
  8227.  00h    WORD    segment of next header or 0000h
  8228.  02h    WORD    segment of previous header or 0000h
  8229.  04h    WORD    size of block in paragraphs, including header
  8230.  06h    BYTE    availability flag (00h in use, 01h free)
  8231. ----------1511-------------------------------
  8232. INT 15 - TopView commands
  8233.     AH = 11h
  8234.     AL = various (except 17h)
  8235. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  8236.       see those below
  8237. SeeAlso: AH=DEh
  8238. ----------1511-------------------------------
  8239. INT 15 - VMiX - "sys_system" - EXECUTE SHELL SYSTEM COMMANDS
  8240.     AH = 11h
  8241.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  8242.             request (max len = 127)
  8243. Return: AX = status (SYS_OK or SYS_ERROR)
  8244. SeeAlso: AH=0Ch"VMiX"
  8245. ----------1511-------------------------------
  8246. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  8247.     AH = 11h
  8248. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  8249. SeeAlso: AH=12h"MultiDOS"
  8250. ----------151117BX0000-----------------------
  8251. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  8252.     AX = 1117h
  8253.     BX = 0000h    get current mapping context without setting
  8254.          nonzero    set new mapping context
  8255. Return: BX = mapping context in effect before call
  8256.     interrupts enabled
  8257. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  8258.     mapping contexts determine conventional-memory addressability; setting
  8259.       a mapping context ensures that the associated program and data areas
  8260.       are in memory for access.  Usable by drivers, TSRs and shared
  8261.       programs.
  8262.     caller need not be running under DESQview, but must ensure that the
  8263.       stack in use will not be mapped out by the call
  8264. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  8265. ----------1511DE-----------------------------
  8266. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  8267.     AX = 11DEh
  8268. Return: CF clear if installed
  8269.         AX = segment at which QEXT.SYS is located
  8270. Note:    a private entry point may be found by searching the beginning of the
  8271.       returned segment for the signature string
  8272.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  8273.       prior to the signature contains the QEXT version number in BCD,
  8274.       and the word prior to that contains the offset within the QEXT
  8275.       code segment of the private entry point
  8276. SeeAlso: INT 67/AH=3Fh
  8277.  
  8278. Call private entry point with:
  8279.     AH = 00h ???
  8280.     AH = nonzero ???
  8281. ----------1512-------------------------------
  8282. INT 15 - VMiX - "sys_sleep" - PUT PROCESS TO SLEEP
  8283.     AH = 12h
  8284.     STACK:    WORD    process ID
  8285. Return: AX = status (SYS_OK or SYS_ERROR)
  8286. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  8287. ----------1512-------------------------------
  8288. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  8289.     AH = 12h
  8290. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  8291. SeeAlso: AH=11h"MultiDOS"
  8292. ----------1512--BH00-------------------------
  8293. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  8294.     AH = 12h
  8295.     BH = 00h
  8296.     BL = which handle to return
  8297.         00h handle in DWORD on top of stack
  8298.         01h current task's window handle
  8299.         02h given task's mailbox handle (task's handle on stack)
  8300.         03h current task's mailbox handle
  8301.         04h given task's keyboard handle (task's handle on stack)
  8302.         05h current task's keyboard object handle
  8303.         06h given task's OBJECTQ handle (task's handle on stack)
  8304.         07h current task's OBJECTQ handle
  8305.         08h      \
  8306.           thru > return 0000:0000 under DV < 2.26
  8307.         10h      /
  8308.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  8309.         0Dh (2.26+) task handle of owner (parent) of current task
  8310. Return: DWORD on top of stack is object handle
  8311. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  8312.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  8313.       window)
  8314. SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
  8315. ----------1512--BH01-------------------------
  8316. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  8317.     AH = 12h
  8318.     BH = 01h
  8319.     BL = object type to create
  8320.         00h (DV 2.0x only) handle is DWORD on top of stack
  8321.         01h (DV 2.0x only) use task's window handle
  8322.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  8323.         03h (DV 2.0x only) current task's mailbox
  8324.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  8325.         05h (DV 2.0x only) current task's keyboard object
  8326.         08h WINDOW class
  8327.         09h MAILBOX class
  8328.         0Ah KEYBOARD class
  8329.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  8330.         0Fh POINTER object
  8331.         10h PANEL object
  8332.     STACK: (if window object or WINDOW class)
  8333.            DWORD address to jump to (no new task if high word == 0)
  8334.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  8335.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  8336.            DWORD bytes system memory for input buffer for READ/READN
  8337.             (0 == none, -1 == default--same as logical window size)
  8338.            DWORD window size, columns
  8339.            DWORD window size, rows
  8340.            DWORD length of window title
  8341.            DWORD address of window title
  8342. Return: DWORD on top of stack is new object handle
  8343. Notes:    if a new task is created, it is started with
  8344.       AX = BX = SI = DI = BP = 0
  8345.       DX:CX = handle of parent task
  8346.       DS = ES = SS = segment of private stack (and new task's handle)
  8347.     new windows are orphans, inherit the colors/hidden status of the
  8348.       creating task's window, and are placed in the upper left hand corner
  8349.       of the screen but not automatically redrawn
  8350.     new keyboards are closed, and have all object bits cleared except for
  8351.       the hardware cursor bit
  8352. SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
  8353. ----------1512--BH02-------------------------
  8354. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  8355.     AH = 12h
  8356.     BH = 02h
  8357.     BL = object
  8358.         00h handle in DWORD on top of stack
  8359.         window: close window and free
  8360.         timer: free timer
  8361.         panel: free panel object
  8362.         pointer: free pointer
  8363.         01h task's window handle - kills task, never returns
  8364.         02h given task's mailbox (task's handle on top of stack)
  8365.         03h current task's mailbox
  8366.         04h given task's keyboard (task's handle on top of stack)
  8367.         05h current task's keyboard object
  8368. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  8369.       task windows also free any mailbox, objectq, and panel objects held
  8370.       by the task and any child tasks
  8371.     if the keyboard being freed is the default keyboard for a task, this
  8372.       call is equivalent to CLOSE
  8373.     panel and pointer objects are automatically closed if open
  8374. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
  8375. ----------1512--BH03-------------------------
  8376. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  8377.     AH = 12h
  8378.     BH = 03h
  8379.     BL = object
  8380.         00h mailbox handle in DWORD on top of stack
  8381.         02h sender of last msg read from mailbox (task's handle on stack)
  8382.         03h sender of last msg read from current task's mailbox
  8383. Return: DWORD on stack is task handle of message sender
  8384. SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
  8385. ----------1512--BH03-------------------------
  8386. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  8387.     AH = 12h
  8388.     BH = 03h
  8389.     BL = window to be connected
  8390.         00h handle of window to be attached in DWORD on top of stack
  8391.         01h attach current task's main window
  8392.     STACK: DWORD handle of window to attach to or 00000000h to detach
  8393. Return: STACK popped
  8394. Notes:    when two windows are connected, both will move if the user moves either
  8395.     multiple windows may be attached to a single window, but each window
  8396.       may only be attached to one window at a time
  8397. SeeAlso: AH=12h/BH=83h
  8398. ----------1512--BX0300-----------------------
  8399. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  8400.     AH = 12h
  8401.     BX = 0300h
  8402.     STACK: DWORD handle of panel object
  8403. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  8404.            DWORD address of directory
  8405. Note:    a null string is returned if the object is not open
  8406. SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
  8407.  
  8408. Format of panel file:
  8409. Offset    Size    Description
  8410.  00h  2 BYTEs    C0h C3h
  8411.  02h    BYTE    number of panels in file
  8412.  03h    for each panel in file:
  8413.         8 BYTEs  blank-padded panel name
  8414.           DWORD  panel offset in file
  8415.           WORD   panel length
  8416.     data for panels (each consists of one or more window/query/manager
  8417.     streams)
  8418.         first byte of each panel must be 1Bh, fifth byte must be E5h
  8419. ----------1512--BH04-------------------------
  8420. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  8421.     AH = 12h
  8422.     BH = 04h
  8423.     BL = window to read from
  8424.         00h handle is DWORD on top of stack
  8425.         01h use calling task's default window
  8426.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  8427.         0Dh (DV 2.26+) default window of parent task of current task
  8428. Return: STACK:    DWORD number of bytes read
  8429.         DWORD address of buffer
  8430. Notes:    reading starts at the current logical cursor position; the cursor is
  8431.       updated to point at the character following the last one read
  8432.     any translucent blanks (FFh) which are visible on screen are changed
  8433.       to the character which is seen through them
  8434.     the string produced by the read is placed in an input buffer which may
  8435.       be reused by the next READ or READN of a window
  8436.     window stream opcodes D8h and D9h determine whether the read returns
  8437.       characters or attributes
  8438. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
  8439. ----------1512--BH04-------------------------
  8440. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  8441.     AH = 12h
  8442.     BH = 04h
  8443.     BL = object
  8444.         00h handle is DWORD on top of stack
  8445.         mailbox: wait for and get next message
  8446.         keyboard: wait for and get pointer to next input buffer
  8447.         pointer: wait for and get next message
  8448.         02h get next message from mailbox (task's handle on top of stack)
  8449.         03h get next message from current task's mailbox
  8450.         04h get the next input from keyboard (handle on top of stack)
  8451.         05h get the next input from task's default keyboard
  8452.         06h wait for input from any object in OBJECTQ (handle on stack)
  8453.         07h wait for input from any object in task's default OBJECTQ
  8454. Return: STACK: (if objectq) DWORD handle of object with input
  8455.            (otherwise)  DWORD number of bytes
  8456.                 DWORD address
  8457. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  8458.       containing the character code as returned by the BIOS; the BIOS scan
  8459.       code is available via the STATUS call if the character is zero
  8460.     for a keyboard in field mode, the input buffer format is determined
  8461.       by the field table header for the window the keyboard is attached to
  8462.     keyboard input buffers and mailbox message buffers may be invalidated
  8463.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  8464. SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
  8465.  
  8466. Format of pointer message:
  8467. Offset    Size    Description
  8468.  00h    WORD    row
  8469.  02h    WORD    column
  8470.  04h    BYTE    status
  8471.         bit 7: set when press/release mode active and button pressed
  8472.         bit 6: set when press/release mode active and button released
  8473.         bits 7-2: number of clicks-1 if multiple-click mode active
  8474.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  8475.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  8476. ----------1512--BX0400-----------------------
  8477. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  8478.     AH = 12h
  8479.     BX = 0400h
  8480.     STACK: DWORD timer's handle
  8481. Return: after timer expires
  8482.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  8483. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
  8484. ----------1512--BX0400-----------------------
  8485. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  8486.     AH = 12h
  8487.     BX = 0400h
  8488.     STACK: DWORD handle of panel object
  8489.            DWORD window's handle (or 0 for current task's window)
  8490.            DWORD length of panel name
  8491.            DWORD pointer to panel name
  8492. Return: STACK: DWORD handle of window which was used
  8493.            DWORD handle of keyboard or 0
  8494. Notes:    status of APPLY may be checked with STATUS message
  8495.     panel MUST have the following format
  8496.       first byte must be 1Bh (i.e. must start with a stream)
  8497.       first opcode in stream must be E5h
  8498.         single byte arg of opcode is interpreted thus:
  8499.           bits 7,6    11 means create new window
  8500.             10 means create new field table for existing window
  8501.             01 means use existing window and field table
  8502.           bit 5 if set, panel contains a field table 
  8503.             (creates a new keyboard and puts it in field mode)
  8504.           bit 4 if set, panel contains input fields
  8505.           bit 3 if set, panel contains select fields but no input fields
  8506.     if the panel contains input or select fields, a keyboard handle is
  8507.       returned; either the window's current open keyboard or a
  8508.       newly-created keyboard object.  The caller should read that keyboard
  8509.       to obtain input from the panel.
  8510. SeeAlso: AH=12h/BH=84h
  8511. ----------1512--BH05------------------------
  8512. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  8513.     AH = 12h
  8514.     BH = 05h
  8515.     BL = object
  8516.         00h handle is DWORD on top of stack
  8517.         timer: start timer to end at a specified time
  8518.         keyboard: add input buffer to queue
  8519.         pointer: move pointer icon to specified position
  8520.         02h send message by value/status=0 to mbox (task's handle on stack)
  8521.         03h send message by value/status=0 to current task's mailbox
  8522.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  8523.         05h add input buffer to task's default KEYBOARD queue
  8524.         06h add an object to OBJECTQ (handle on top of stack)
  8525.         07h add an object to task's default OBJECTQ
  8526.     STACK: (if mailbox)  DWORD length
  8527.                  DWORD address
  8528.            (if keyboard) DWORD status (scan code in keystroke mode)
  8529.                  DWORD length (should be 1 in keystroke mode)
  8530.                  DWORD address
  8531.            (if objectq)  DWORD handle of object to add
  8532.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  8533.                    only accurate to 1/18 sec)
  8534.            (if pointer)  DWORD column relative to origin of window
  8535.                  DWORD row relative to origin of window
  8536. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  8537.     the data and status written to a keyboard object must match the format
  8538.       returned by the keyboard object in the current mode
  8539.     the pointer position is scaled according to the current scaling factors
  8540. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  8541. ----------1512--BH05-------------------------
  8542. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  8543.     AH = 12h
  8544.     BH = 05h
  8545.     BL = window to write to
  8546.         00h DWORD on top of stack is window handle
  8547.         01h write string to task's default window
  8548.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  8549.         0Dh (DV 2.26+) default window of parent of current task
  8550.     STACK: DWORD object handle if handle passed on stack
  8551.            DWORD total length of string (high word == 0)
  8552.            DWORD address of string to display
  8553. Return: indicated actions performed
  8554.     a. non-control characters are displayed (opcodes DEh and DFh control
  8555.        whether the attributes are left or changed to the current attrib)
  8556.     b. CR/LF/BS/Tab cause the usual cursor movement
  8557.     c. ESC starts a data structure with additional commands if following
  8558.        byte is less than 20h; otherwise, it is written to the window
  8559.     STACK:    DWORD handle of new window if window stream opcode E6h
  8560.         else nothing
  8561. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  8562.  
  8563. Data Structure:
  8564.     MAGIC  DB  1Bh
  8565.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  8566.     LENGTH DW  ?   ; length of remainder in bytes
  8567.     var-length fields follow, each an OPCODE followed by
  8568.          zero or more args
  8569.  
  8570. MODE 00h (set or display values) "WINDOW STREAM"
  8571.     Opcodes:args
  8572.     00h  display 20h blanks with the default attribute
  8573.     01h-1Fh display OPCODE blanks with the default attribute
  8574.     20h  display char with default attribute 20h times
  8575.          BYTE char to repeat
  8576.     21h-3Fh display char with default attribute OPCODE-20h times
  8577.          BYTE char to repeat
  8578.     40h  display 20h blanks with specified attribute
  8579.          BYTE attribute of blanks
  8580.     41h-5Fh display OPCODE-40h blanks with specified attribute
  8581.          BYTE attribute of blanks
  8582.     60h  display next 20h characters
  8583.          20h BYTEs characters to display
  8584.     61h-7Fh display next OPCODE-60h characters
  8585.          N BYTEs characters to display
  8586.     80h-87h     display N blanks with default attribute
  8587.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  8588.               [000h means 800h]
  8589.     88h-8Fh display N copies of the character
  8590.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  8591.               [000h means 800h]
  8592.          BYTE character to repeat
  8593.     90h-97h     display N blanks with specified attribute
  8594.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  8595.               [000h means 800h]
  8596.          BYTE attribute
  8597.     98h-9FH     display string at logical cursor pos
  8598.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  8599.               [000h means 800h]
  8600.          N BYTEs string to display
  8601.     A0h  set logical cursor row
  8602.          BYTE row number (0 is top)
  8603.     A1h  set logical cursor column
  8604.          BYTE column number (0 is leftmost)
  8605.     A2h  set top edge of scrolling region
  8606.          BYTE row
  8607.     A3h  set left edge of scrolling region
  8608.          BYTE column
  8609.     A4h  set row of physical window position
  8610.          BYTE line
  8611.     A5h  set column of physical window position
  8612.          BYTE column
  8613.     A6h  set height of physical window
  8614.          BYTE #rows
  8615.     A7h  set width of physical window
  8616.          BYTE #columns
  8617.     A8h  set viewport row
  8618.          BYTE row
  8619.     A9h  set viewport column
  8620.          BYTE column
  8621.     AAh  set virtual screen height [contents of window unpredictable after]
  8622.          BYTE rows
  8623.     ABh  set virtual screen width [contents of window unpredictable after]
  8624.          BYTE columns
  8625.     ACh-AEh     unused
  8626.     AFh  set compatible/preferred video modes
  8627.          BYTE compatibility/preference mask
  8628.         bit 7    compatible with monochrome
  8629.         bit 6    compatible with color text, EGA/VGA graphics
  8630.         bit 5    compatible with medium-resolution CGA graphics
  8631.         bit 4    compatible with high-resolution CGA graphics
  8632.         bit 3    prefer monochrome
  8633.         bit 2    prefer color text, EGA/VGA graphics
  8634.         bit 1    prefer medium-resolution CGA graphics
  8635.         bit 0    prefer high-resolution CGA graphics
  8636.     B0h  move logical cursor down
  8637.          BYTE #rows (signed, negative values move up)
  8638.             [if #rows=0 and hardware cursor owner, update hw crsr]
  8639.     B1h  move logical cursor right
  8640.          BYTE #cols (signed, negative values move left)
  8641.             [if #cols=0 and hardware cursor owner, update hw crsr]
  8642.     B2h  shift top edge of scrolling region
  8643.          BYTE #rows (signed)
  8644.     B3h  shift left edge of scrolling region
  8645.          BYTE #cols (signed)
  8646.     B4h  shift physical window down
  8647.          BYTE #lines (signed)
  8648.     B5h  shift physical window right
  8649.          BYTE #columns (signed)
  8650.     B6h  expand physical window vertically
  8651.          BYTE #lines (signed)
  8652.     B7h  expand physical window horizontally
  8653.          BYTE #columns (signed)
  8654.     B8h  adjust viewport row
  8655.          BYTE #rows (signed)
  8656.     B9h  adjust viewport column
  8657.          BYTE #columns (signed)
  8658.     BAh  adjust virtual screen height [contents of window unpredict after]
  8659.          BYTE #rows to increase (signed)
  8660.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  8661.          BYTE #cols to increase (signed)
  8662.     BCh-BFh     reserved (currently unused)
  8663.     C0h  set logical cursor position
  8664.          BYTE row number (0 is top border)
  8665.          BYTE column number (0 is left border)
  8666.     C1h  set top left corner of scrolling region
  8667.          BYTE row
  8668.          BYTE column
  8669.     C2h  set physical window pos
  8670.          BYTE upper left row (no top border if 0)
  8671.          BYTE upper left column (no left border if 0)
  8672.     C3h  set current window size
  8673.          BYTE #rows
  8674.          BYTE #cols
  8675.     C4h  set upper left corner of viewport (portion of virtual screen
  8676.          displayed in window)
  8677.          BYTE row
  8678.          BYTE column
  8679.     C5h  set size of virtual screen [contents unpredictable afterwards]
  8680.          BYTE #rows
  8681.          BYTE #cols
  8682.     C6h  unused
  8683.     C7h  unused
  8684.     C8h  set logical cursor relative to current position
  8685.          BYTE number of rows to move down (signed)
  8686.          BYTE number of columns to move right (signed)
  8687.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  8688.     C9h  shift top left corner of scrolling region
  8689.          BYTE #rows (signed)
  8690.          BYTE #cols (signed)
  8691.     CAh  set window pos relative to current position
  8692.          BYTE number of rows to shift down (signed)
  8693.          BYTE number of columns to shift right (signed)
  8694.     CBh  set window size relative to current size
  8695.          BYTE number of rows to expand (signed)
  8696.          BYTE number of cols to expand (signed)
  8697.     CCh  shift viewport relative to current position
  8698.          BYTE rows to shift (signed)
  8699.          BYTE cols to shift (signed)
  8700.     CDh  resize virtual screen
  8701.          BYTE #rows to expand (signed)
  8702.          BYTE #cols to expand (signed)
  8703.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  8704.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  8705.     D0h  allow window frame to extend beyond screen
  8706.     D1h  always display a complete frame, even if window extends beyond 
  8707.          edge of screen
  8708.     D2h  allow DV to change logical colors on video mode switch (default)
  8709.     D3h  application changes logical attributes
  8710.     D4h  window is visible [must redraw to actually make visible]
  8711.     D5h  window is hidden [must redraw to actually remove]
  8712.     D6h  window has frame (default)
  8713.     D7h  window unframed [must redraw to actually remove frame]
  8714.     D8h  READ/READN will read characters from window (default)
  8715.     D9h  READ/READN will read attributes from window
  8716.     DAh  use logical attributes, which may be remapped
  8717.         attributes
  8718.            1 normal text
  8719.            2 highlighted normal text
  8720.            3 help text
  8721.            4 highlighted help text
  8722.            5 error message
  8723.            6 highlighted error message
  8724.            7 emphasized text
  8725.            8 marked text
  8726.            9-16 are reverse video versions of 1-8
  8727.     DBh  use physical attributes for characters
  8728.     DCh  enable special actions for control characters (default)
  8729.     DDh  disable special control char handling, all chars displayable by
  8730.          BIOS TTY call
  8731.     DEh  write both character and attribute (default)
  8732.     DFh  write character only, leave attribute untouched
  8733.     E0h  repeat following commands through E1h opcode
  8734.          BYTE number of times to repeat (00h means 256 times)
  8735.     E1h  end of commands to repeat, start repeating them
  8736.     E2h  set current output color
  8737.          BYTE color
  8738.     E3h  clear virtual screen from scroll origin to end using current color
  8739.     E4h  redraw window
  8740.     E5h  select menu style
  8741.          BYTE style (normally 18h)
  8742.         bits 5,4 = 01 use two-letter menu entries for remainder of
  8743.           this stream
  8744.     E5h  (panel file only)
  8745.          BYTE modifier
  8746.         bits 7,6 = 11 panel stream creates new window
  8747.              = 10 panel defines new field table for existing window
  8748.              = 01 panel stream uses existing window & field table
  8749.         bit 5 = 1 stream contains a field table (create kyboard object)
  8750.         bit 4 = 1 stream defines input fields (create keyboard object)
  8751.         bit 3 = 1 stream defines select fields but not input fields
  8752.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  8753.         bit 1 reserved
  8754.         bit 0 reserved
  8755.     E6h  create new window and perform rest of manipulations in new window
  8756.          BYTE number of rows
  8757.          BYTE number of columns
  8758.          Return: DWORD object handle of new window returned on stack at end
  8759.          Note: the window is created with a physical size of 0x0 at the
  8760.              same position as the window to which this stream was sent
  8761.     E7h  no operation
  8762.     E8h  scroll area up (top left corner defined by opcode C1h)
  8763.          BYTE height
  8764.          BYTE width
  8765.     E9h  scroll area down (top left corner defined by opcode C1h)
  8766.          BYTE height
  8767.          BYTE width
  8768.     EAh  scroll area left (top left corner defined by opcode C1h)
  8769.          BYTE height
  8770.          BYTE width
  8771.     EBh  scroll area right (top left corner defined by opcode C1h)
  8772.          BYTE height
  8773.          BYTE width
  8774.     ECh  set logical attributes for window contents
  8775.          BYTE video modes command applies to
  8776.         bit 7    monochrome
  8777.         bit 6    color text, EGA/VGA graphics
  8778.         bit 5    medium-resolution CGA graphics
  8779.         bit 4    high-resolution CGA graphics
  8780.          BYTE which attributes to set
  8781.         bit 7  if set, copy single following byte to indicated attribs
  8782.         bits 4-6  # of first attribute to change - 1
  8783.         bits 0-3  # of consecutive attributes to change
  8784.          N BYTEs new attributes
  8785.     EDh  set logical attributes for window frame
  8786.          BYTE video modes command applies to (see opcode ECh)
  8787.          BYTE which attributes to set
  8788.         bit 7  if set, copy single following byte to indicated attrs
  8789.         bits 4-6  # of first attribute to change - 1
  8790.         bits 0-3  # of consecutive attributes to change
  8791.          N BYTEs new attributes
  8792.           attributes
  8793.                1 = top left corner
  8794.                2 = top right corner
  8795.                3 = bottom left corner
  8796.                4 = bottom right corner
  8797.                5 = top edge
  8798.                6 = bottom edge
  8799.                7 = left edge
  8800.                8 = right edge
  8801.     EEh  set characters for window frame
  8802.          BYTE video modes command applies to (see opcode ECh)
  8803.          BYTE which characters to set
  8804.         bit 7  if set, copy single following byte to indicated chars
  8805.         bits 4-6  # of first char to change - 1
  8806.         bits 0-3  # of consecutive chars to change
  8807.          N BYTEs new chars (same relative position as attributes above)
  8808.     EFh  set window name
  8809.          BYTE length of name (should be in range 0 to logical screen width)
  8810.          N BYTEs name
  8811.     F0h  clear input field to blanks
  8812.          BYTE field number
  8813.     F1h  fill input field with character
  8814.          BYTE field number
  8815.          BYTE char
  8816.     F2h  set color of input field
  8817.          BYTE field number (1-N)
  8818.          BYTE attribute
  8819.     F3h  set initial contents of input field
  8820.          BYTE field number (1-N)
  8821.          N BYTEs enough chars to exactly fill field as defined by op FFh
  8822.     F4h  position cursor to start of specific input field
  8823.          BYTE field number (1-N)
  8824.     F5h  change field table entry
  8825.          BYTE field number
  8826.          7-8 BYTEs field table entry (see opcode FFh below)
  8827.     F6h  set field type
  8828.          BYTE field number
  8829.          BYTE type
  8830.             00h inactive
  8831.             40h output field
  8832.             80h input field
  8833.             C0h deselected field
  8834.             C2h selected field
  8835.     F7h  "broadcast write"    write data to fields with program output bit
  8836.         set in field table entry, in field number order
  8837.          N BYTEs (total length of all program output fields)
  8838.     F8h  scroll field up a line
  8839.          BYTE field number
  8840.     F9h  scroll field down a line
  8841.          BYTE field number
  8842.     FAh  scroll field left
  8843.          BYTE field number
  8844.     FBh  scroll field right
  8845.          BYTE field number
  8846.     FCh  set field table header
  8847.          BYTE number of fields (must be <= existing number of fields)
  8848.          BYTE screen behavior bits
  8849.         bit 7  reserved
  8850.         bit 6  set if menu items may be selected via keyboard
  8851.         bit 5  set if left mouse button in "status" mode (press
  8852.             anywhere in window immediately returns control to app)
  8853.         bit 4  set if right mouse button in "status" mode
  8854.         bit 3  if set, select fields return contents or blanks rather
  8855.             than 'Y' or 'N'
  8856.         bit 2  if set, modified bits reset on return to application
  8857.         bits 0,1 = 00 no data returned on read of keyboard
  8858.                01 data returned as array of chars containing
  8859.                 all fields packed together, with no field
  8860.                 numbers
  8861.                10 data returned as numbered variable-length
  8862.                 records for all fields
  8863.                11 data returned as numbered variable-length
  8864.                 records for the fields which were modified
  8865.          BYTE current input field (updated by DESQview)
  8866.          BYTE current select field (updated by DESQview)
  8867.          BYTE attribute for select fields when they are pointed at
  8868.          BYTE attribute for select fields which have been selected
  8869.     FDh  reset modified bit for all fields
  8870.     FEh  reset selected and modified bits for all fields
  8871.     FFh  set up input fields
  8872.          6 BYTEs table header (see opcode FCh above)
  8873.          the field table entries, one for each field
  8874.          BYTE start row       \
  8875.          BYTE start column  \ if menu selection and start is to
  8876.          BYTE end row        / right or below end, select from kbd only
  8877.          BYTE end column   /
  8878.          BYTE field type
  8879.             bits 7,6 = 00 inactive (non-entry) field
  8880.                    01 echos keystrokes input to make menu selection
  8881.                    10 fill-in field
  8882.                    11 select field
  8883.             bit 5  field can be filled by broadcast write (F7h opcode)
  8884.             bit 4  reserved
  8885.             bit 3  reserved
  8886.             bit 2  reserved
  8887.             bit 1  set if field selected
  8888.             bit 0  set if field modified
  8889.          BYTE modifier
  8890.               if type is fill-in, then bit flags to determine behavior
  8891.               bit 7     if set, automatically enter CR when field full
  8892.               bit 6     move to next field when current field is full
  8893.               bit 5     if set, enter text from right end (for numbers)
  8894.               bit 4     if set, force input to uppercase
  8895.               bit 3     if set, clear old contents on first keystroke
  8896.               bit 2     if set, input returned when cursor moves out
  8897.                  of modified field ("validate",API level 2.02+)
  8898.               bit 1     reserved
  8899.               bit 0     reserved
  8900.               if select field, first key to press to activate
  8901.               00h if have to point-&-click or is an extended-ASCII
  8902.                   keystroke (only if two-key menus enabled)
  8903.          BYTE (select field only) normal color of field
  8904.          BYTE second key for select field.  This byte is present iff
  8905.               two-letter menu entries selected with opcode E5h, and
  8906.               in that case is present regardless of field type
  8907.          Note: DESQview uses and updates the actual copy of the information
  8908.            which is contained in the stream.  Thus this info must remain
  8909.            intact until after the data entry is complete.
  8910.  
  8911. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  8912.     A0h return logical cursor row in next byte
  8913.     A1h return logical cursor column in next byte
  8914.     A2h return top row of scrolling region in next byte
  8915.     A3h return left column of scrolling region in next byte
  8916.     A4h return row of physical window origin in next byte
  8917.     A5h return column of physical window origin in next byte
  8918.     A6h return height of physcial window in next byte
  8919.     A7h return width of physical window in next byte
  8920.     A8h return row of viewport origin in next byte
  8921.     A9h return column of viewport origin in next byte
  8922.     AAh return height of virtual screen in next byte
  8923.     ABh return width of virtual screen in next byte
  8924.     AFh return current video mode in next byte
  8925.     C0h return current logical cursor position in next two bytes
  8926.     C1h return top left corner of scrolling region in next two bytes
  8927.     C2h return current window position in next two bytes
  8928.     C3h return current window size in next two bytes
  8929.     C4h return current viewport origin in next two bytes
  8930.     C5h return current virtual screen size in next two bytes
  8931.     D0h \ overwritten with D0h if frames may fall off screen edge
  8932.     D1h /               D1h if frames always displayed entirely
  8933.     D2h \ overwritten with D2h if DESQview controls color palette
  8934.     D3h /               D3h if application changes color palette
  8935.     D4h \ overwritten with D4h if window visible
  8936.     D5h /               D5h if window hidden
  8937.     D6h \ overwritten with D6h if window has frame
  8938.     D7h /               D7h if window unframed
  8939.     D8h \ overwritten with D8h if reading characters from window
  8940.     D9h /               D9h if reading attributes from window
  8941.     DAh \ overwritten with DAh if using logical attributes
  8942.     DBh /               DBh if using physical attributes
  8943.     DCh \ overwritten with DCh if TTY control char interpretation on
  8944.     DDh /               DDh if TTY control char interpretation off
  8945.     DEh \ overwritten with DEh if writing both characters and attributes
  8946.     DFh /               DFh if leaving attributes untouched
  8947.     E2h return current color in next byte
  8948.     ECh get logical attributes for window contents
  8949.         BYTE execute call if currently in specified video mode
  8950.         bit 7    monochrome
  8951.         bit 6    color text, EGA/VGA graphics
  8952.         bit 5    medium-resolution CGA graphics
  8953.         bit 4    high-resolution CGA graphics
  8954.         BYTE which attributes to get
  8955.         bit 7 unused???
  8956.         bits 4-6 first attribute to get - 1
  8957.         bits 0-3 # consecutive attributes
  8958.         N BYTEs buffer to hold attributes
  8959.     EDh get logical attributes for window frame
  8960.         BYTE execute call if currently in video mode (see opcode ECh)
  8961.         BYTE which attributes to get
  8962.         bit 7 unused???
  8963.         bits 4-6 first attribute to get - 1
  8964.         bits 0-3 # consecutive attributes
  8965.         N BYTEs buffer to hold attributes
  8966.     EEh get characters for window frame
  8967.         BYTE execute call if currently in video mode (see opcode ECh)
  8968.         BYTE which attributes to get
  8969.         bit 7 unused???
  8970.         bits 4-6 first char to get - 1
  8971.         bits 0-3 # consecutive chars
  8972.         N BYTEs buffer to hold chars
  8973.     EFh return first N characters of current window name
  8974.         BYTE    max length of returned name
  8975.         N BYTEs buffer to hold window name
  8976.     F3h return contents of specified field
  8977.         BYTE field number
  8978.         N BYTEs buffer to hold field contents (size exactly equal to field
  8979.             size)
  8980.     F5h get field table entry
  8981.         BYTE field number
  8982.         7-8 BYTEs buffer to hold field table entry
  8983.            Notes: DV < 2.26 always returns 7 bytes
  8984.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  8985.             table is using 8-byte entries and eighth byte after
  8986.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  8987.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  8988.             depending on the field table entry size
  8989.     F6h get type of a field
  8990.         BYTE field number
  8991.         BYTE type
  8992.     FCh get field table header
  8993.         6 BYTEs buffer to store header
  8994.  
  8995. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  8996.     00h allow window to be moved horizontally
  8997.     01h allow window to be moved vertically
  8998.     02h allow window to change width
  8999.     03h allow window to change height
  9000.     04h allow window to be scrolled horizontally
  9001.     05h allow window to be scrolled vertically
  9002.     06h allow "Close Window" menu selection for application
  9003.     07h allow "Hide Window" menu selection for application
  9004.     08h allow application to be suspended ("Rearrange/Freeze")
  9005.     0Eh allow "Scissors" menu
  9006.     10h allow DESQview main menu to be popped up
  9007.     11h allow "Switch Windows" menu
  9008.     12h allow "Open Window" menu
  9009.     13h allow "Quit" menu selection
  9010.     20h-33h opposite of 00h-13h, disallow specified action
  9011.     40h notify if horizontal position of window changes
  9012.     41h notify if vertical position of window changes
  9013.     42h notify if width of window changes
  9014.     43h notify if height of window changes
  9015.     44h notify if window scrolled horizontally
  9016.     45h notify if window scrolled vertically
  9017.     46h notify if window is closed--program has to clean up and exit itself
  9018.     47h notify if window is hidden
  9019.     48h notify if "?" on main menu selected
  9020.     49h notify if pointer message sent to window
  9021.     4Ah notify if window is placed in foreground
  9022.     4Bh notify if window is placed in background
  9023.     4Ch notify if video mode changes
  9024.     4Dh notify if "Scissors" menu "Cut" option selected
  9025.     4Eh notify if "Scissors" menu "Copy" option selected
  9026.     4Fh notify if "Scissors" menu "Paste" option selected
  9027.     50h notify if DESQview main menu about to pop up
  9028.     51h notify if DESQview main menu popped down
  9029.     60h-71h     opposite of 40h-51h: don't notify on specified event
  9030.     84h attach window to parent task's window (both move together)
  9031.     85h detach window from parent task's window (may move independently)
  9032.     86h disable background operation for application
  9033.     87h enable running in background
  9034.     88h set minimum size of physical window
  9035.         BYTE rows
  9036.         BYTE columns
  9037.     89h set maximum size of physical window
  9038.         BYTE rows
  9039.         BYTE cols
  9040.     8Ah set primary asynchronous notification routine
  9041.         DWORD address of routine, 0000h:0000h means none (see also below)
  9042.     8Bh set async notification parameter
  9043.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  9044.     ACh (DV2.2+) perform regular select field attribute processing
  9045.     ADh (DV2.2+) protect attributes in selected field from being lost
  9046.     AEh make window default notify window for owning app (API level 2.00+)
  9047.     AFh set selected field marker character
  9048.         BYTE character to display at left edge of selected fields
  9049.     BCh set standard field processing mode 
  9050.     BDh set alternate field processing mode (enables cursor pad for menus)
  9051.     BEh disables changing reverse logical attributes with ECh opcode
  9052.     BFh enables changing reverse logical attributes with ECh opcode
  9053.     C0h make current window topmost in system
  9054.     C1h force current process into foreground
  9055.     C2h make current window topmost in process
  9056.     C3h position mouse pointer relative to origin of current field
  9057.         BYTE rows below upper left corner of field
  9058.         BYTE columns to right of upper left corner of field
  9059.     C4h position mouse pointer relative to origin of given field
  9060.         BYTE field number
  9061.         BYTE rows below upper left corner of field
  9062.         BYTE columns to right of upper left corner of field
  9063.     C5h orphan current window (also hides it)
  9064.         Note: must be last in stream; all subsequent commands ignored
  9065.     C6h show all windows for this process
  9066.     C7h hide all windows for this process
  9067.     C8h suspend process and hide all its windows
  9068.     C9h force current process into background
  9069.     CAh make current window bottom-most in process
  9070.     CBh cancel current window manager operation, remove DV menu, give 
  9071.         control to topmost application
  9072.     CCh orphan window and give it to the system for use as paste data
  9073.     CEh reorder windows
  9074.         DWORD pointer to null-terminated list of words
  9075.           each word is segment of object handle for a window
  9076.     FFh no operation
  9077.  
  9078. MODES 14h to 1Fh "USER STREAMS"
  9079.     normally NOPs, but may be defined by SETESC message to invoke FAR
  9080.     routines, one for each mode number
  9081.       on entry to handler,
  9082.         DS:SI -> first byte of actual stream (not header)
  9083.         CX = #bytes in stream
  9084.         ES:DI = window's handle
  9085.  
  9086. Asynchronous notification routine defined by manager stream 8Ah called with:
  9087.     ES:DI = handle of window
  9088.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  9089.        mailbox contains message indicating event
  9090.           Opcode
  9091.            40h  horizontal movement
  9092.            DWORD object handle of window
  9093.            BYTE     new row
  9094.            BYTE     new col
  9095.            41h  vertical movement
  9096.            DWORD object handle of window
  9097.            BYTE     new row
  9098.            BYTE     new col
  9099.            42h  horizontal size change
  9100.            DWORD object handle of window
  9101.            BYTE     new rows
  9102.            BYTE     new cols
  9103.            43h  vertical size change
  9104.            DWORD object handle of window
  9105.            BYTE     new rows
  9106.            BYTE     new cols
  9107.            44h  scrolled horizontally
  9108.            DWORD object handle of window
  9109.            BYTE     mouse row within window
  9110.            BYTE     mouse column within window
  9111.            BYTE     field mouse is on, 0 if none
  9112.            BYTE     amount moved: >0 right, <0 left, 0 done
  9113.            45h  scrolled vertically
  9114.            DWORD object hande of window
  9115.            BYTE     mouse row within window
  9116.            BYTE     mouse column within window
  9117.            BYTE     field mouse is on, 0 if none
  9118.            BYTE     amount moved: >0 down, <0 up, 0 done
  9119.            46h  window close request
  9120.            DWORD object handle of window
  9121.            BYTE     mouse pointer row
  9122.            BYTE     mouse pointer column
  9123.            BYTE     field mouse is on, 0 if none
  9124.            47h  application's windows hidden
  9125.            48h  Help for Program selected
  9126.            DWORD object handle of window
  9127.            BYTE     mouse pointer row
  9128.            BYTE     mouse pointer column
  9129.            BYTE     field mouse is on, 0 if none
  9130.            49h  pointer message sent to window
  9131.            DWORD pointer handle which received message
  9132.            4Ah  switched to window from another ("raise")
  9133.            4Bh  switched away from the window ("lower")
  9134.            4Ch  video mode changed
  9135.            BYTE new BIOS video mode
  9136.            4Dh  Scissors/cUt selected
  9137.            DWORD object handle of window
  9138.            BYTE     row of upper left corner
  9139.            BYTE     column of upper left corner
  9140.            BYTE     field number ul corner is in, 0=none
  9141.            DWORD handle of orphaned window created with
  9142.              copy of data from specified region
  9143.            BYTE     height of region
  9144.            BYTE     width of region
  9145.            4Eh  Scissors/Copy selected
  9146.            DWORD object handle of window
  9147.            BYTE     row of upper left corner
  9148.            BYTE     column of upper left corner
  9149.            BYTE     field number ul corner is in, 0=none
  9150.            DWORD handle of orphaned window created with
  9151.              copy of data from specified region
  9152.            BYTE     height of region
  9153.            BYTE     width of region
  9154.            4Fh  Scissors/Paste selected
  9155.            DWORD object handle of window
  9156.            BYTE     row of upper left corner
  9157.            BYTE     column of upper left corner
  9158.            BYTE     field number ul corner is in, 0=none
  9159.            DWORD handle of orphaned window with data
  9160.            BYTE     height of region
  9161.            BYTE     width of region
  9162.             Note: orphaned data window should be adopted or freed
  9163.                 when done
  9164.            50h  main menu about to pop up
  9165.            51h  main menu popped down
  9166. Return: all registers unchanged
  9167. ----------1512--BH06-------------------------
  9168. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  9169.     AH = 12h
  9170.     BH = 06h
  9171.     BL = object
  9172.         00h object handle in DWORD on top of stack
  9173.         mailbox, keyboard, pointer, or timer
  9174.         (DV 2.50+) window
  9175.         01h (DV 2.50+) current task's window
  9176.         04h given task's keyboard (task's handle on top of stack)
  9177.         05h current task's default keyboard
  9178.     STACK: DWORD new priority of object in task's OBJECTQ
  9179.             (new priority of task if window handle)
  9180. Notes:    initially all objects have the same default value.  Should only make 
  9181.       relative adjustments to this default value.
  9182.     when changing priorities, all objects already on the objectq are
  9183.       reordered
  9184.     for window handles, only the non-blocked task(s) with the highest
  9185.       priority receive CPU time under DESQview 2.50-2.52; the default
  9186.       priority is 0Ah
  9187. SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
  9188. ----------1512--BH07-------------------------
  9189. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  9190.     AH = 12h
  9191.     BH = 07h
  9192.     BL = object
  9193.         00h object handle in DWORD on top of stack
  9194.         mailbox, keyboard, pointer, or timer
  9195.         (DV 2.50+) window
  9196.         01h (DV 2.50+) current task's window
  9197.         04h given task's keyboard (task's handle on top of stack)
  9198.         05h current task's default keyboard
  9199. Return: STACK: DWORD object priority
  9200. Note:    initially all objects have the same default value.  Should only make 
  9201.       relative adjustments to this default value.
  9202. SeeAlso: AH=12h/BH=06h
  9203. ----------1512--BH08-------------------------
  9204. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  9205.     AH = 12h
  9206.     BH = 08h
  9207.     BL = object
  9208.         00h handle in DWORD on top of stack
  9209.         window: total character positions in window
  9210.         timer: elapsed time since timer started
  9211.         pointer: number of messages queued to pointer object
  9212.         panel: number of panels in panel file
  9213.         keyboard: number of input buffers queued
  9214.         01h total chars in current task's default window
  9215.         02h number of messages in task's mailbox (task's handle on stack)
  9216.         03h number of messages in current task's mailbox
  9217.         04h number of input buffers queued in task's kbd (handle on stack)
  9218.         05h number of input buffers queued for current task's default kbd
  9219.         06h number of objects queued in OBJECTQ (task's handle on stack)
  9220.         07h number of objects queued in current task's OBJECTQ
  9221.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  9222.         0Dh (DV 2.26+) total chars in parent task's window
  9223. Return: DWORD on top of stack is result
  9224. Note:    for panel objects, a count of zero is returned if no panel file is open
  9225.       for the object
  9226. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  9227. ----------1512--BH09-------------------------
  9228. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  9229.     AH = 12h
  9230.     BH = 09h
  9231.     BL = object
  9232.         00h handle in DWORD on top of stack
  9233.         window: get chars/line
  9234.         timer: get 1/100 seconds remaining before timer expires
  9235.         mailbox: (DV/X) get number of bytes queued to mailbox
  9236.         01h get number of chars/line in current task's default window
  9237.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  9238.         0Dh (DV 2.26+) get chars/line in parent task's window
  9239. Return: DWORD on top of stack is length
  9240. SeeAlso: AH=12h/BH=08h
  9241. ----------1512--BH0A-------------------------
  9242. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  9243.     AH = 12h
  9244.     BH = 0Ah
  9245.     BL = window to write to
  9246.         00h window handle is DWORD on top of stack
  9247.         01h current task's default window
  9248.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  9249.         0Dh (DV 2.26+) default window of parent of current task
  9250.     STACK:    DWORD count of attributes
  9251.         DWORD address of attribute string
  9252.         DWORD count of characters
  9253.         DWORD address of character string
  9254. Notes:    if one string is longer than the other, the shorter one will be reused
  9255.       until the longer one is exhausted
  9256.     the cursor is left just after the last character written
  9257. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  9258. ----------1512--BH0A-------------------------
  9259. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  9260.     AH = 12h
  9261.     BH = 0Ah
  9262.     BL = mailbox to write to
  9263.         00h handle is DWORD on top of stack
  9264.         02h default mailbox of task whose handle is on top of stack
  9265.         03h current task's default mailbox
  9266.     STACK:    DWORD    status (low byte)
  9267.         DWORD    length of message
  9268.         DWORD    address of message
  9269. Notes:    the message is copied into either system or common memory
  9270.     insufficient memory normally causes the process to be aborted; under
  9271.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  9272. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  9273. ----------1512--BH0A-------------------------
  9274. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  9275.     AH = 12h
  9276.     BH = 0Ah
  9277.     BL = object
  9278.         00h handle is DWORD on top of stack
  9279.         timer: start timer for specified interval
  9280.         pointer: set control flags
  9281.         keyboard: set control flags
  9282.         04h set control flags on KEYBOARD object (handle on top of stack)
  9283.         05h set control flags on task's default KEYBOARD object
  9284.     STACK: (if timer)   DWORD duration in 1/100 seconds
  9285.            (otherwise)  DWORD bits to set
  9286. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  9287.  
  9288. For keyboard objects, the bits have the following significance:
  9289.     bit 15 reserved, can't be set
  9290.     bit 14 unused
  9291.     bit 13 reserved, can't be set
  9292.     bit 12-6 unused
  9293.     bit 5  (DV 2.2+) exclusive input
  9294.     bit 4  filter all keys (used with handler established by SETESC)
  9295.         if 0, only keys that would normally be displayed are filtered
  9296.     bit 3  program continues executing while input in progress
  9297.     bit 2  insert mode active for field mode
  9298.     bit 1  hardware cursor displayed when task is hardware cursor owner
  9299.         must be set if keyboard in field mode and field table includes
  9300.         input fields
  9301.     bit 0  keyboard is in field mode rather than keystroke mode
  9302.  
  9303. For pointer objects, the bits have the following significance:
  9304.     bit 15 reserved, can't be set
  9305.     bit 14-8 unused
  9306.     bit 7  mouse pointer is hidden while in window
  9307.     bit 6  get messages even if window not topmost
  9308.     bit 5  get messages even if window not foreground
  9309.     bit 4  multiple clicks separated by less than 1/3 second are counted
  9310.         and returned in a single message
  9311.     bit 3  pointer position is relative to screen origin, not window origin
  9312.     bit 2  send message on button release as well as button press
  9313.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  9314.         pointer leaves the window
  9315.     bit 0  send message only on button activity, not movement
  9316.            DV-specific, and INT 15/AX=DE0Fh must have been called first
  9317. ----------1512--BH0B-------------------------
  9318. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  9319.     AH = 12h
  9320.     BH = 0Bh
  9321.     BL = window to write attributes to
  9322.         00h handle is DWORD on top of stack
  9323.         01h current task's default window
  9324.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  9325.         0Dh (DV 2.26+) default window of parent of current task
  9326.     STACK:    DWORD number of attributes to write
  9327.         DWORD address of attributes
  9328. Note:    the attributes are written starting at the current cursor position; the
  9329.       cursor is left just after the last position written
  9330. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  9331. ----------1512--BH0B-------------------------
  9332. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  9333.     AH = 12h
  9334.     BH = 0Bh
  9335.     BL = mailbox to write to
  9336.         00h handle is DWORD on top of stack
  9337.         02h default mailbox of task whose handle is on top of stack
  9338.         03h current task's default mailbox
  9339.     STACK:    DWORD    status (low byte)
  9340.         DWORD    length of message
  9341.         DWORD    address of message
  9342. Notes:    only a pointer to the message is stored, but the write may still fail
  9343.       due to insufficient memory
  9344.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  9345. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  9346. ----------1512--BH0B-------------------------
  9347. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  9348.     AH = 12h
  9349.     BH = 0Bh
  9350.     BL = OBJECTQ from which to remove all copies of a particular object
  9351.         06h OBJECTQ of task whose handle is on top of stack
  9352.         07h task's default OBJECTQ
  9353.     STACK:    DWORD    handle of object to remove
  9354. Note:    should be sent whenever an object is erased or closed
  9355. ----------1512--BH0B-------------------------
  9356. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  9357.     AH = 12h
  9358.     BH = 0Bh
  9359.     BL = object
  9360.         00h handle is DWORD on top of stack
  9361.         pointer: reset control flags
  9362.         keyboard: reset control flags
  9363.         04h clear control flags on KEYBOARD object (handle on top of stack)
  9364.         05h clear control flags on task's default KEYBOARD object
  9365.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  9366. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  9367. ----------1512--BH0C-------------------------
  9368. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  9369.     AH = 12h
  9370.     BH = 0Ch
  9371.     BL = object
  9372.         00h handle is DWORD on top of stack
  9373.         window:      fill with given character from scroll origin to end
  9374.         keyboard: attach to a window
  9375.         timer:      open
  9376.         pointer:  start taking input for window
  9377.         panel:      associate with a panel file
  9378.         01h fill task's default window with given char from scrl org to end
  9379.         02h open given task's mailbox for input (task's handle on stack)
  9380.         03h open current task's mailbox
  9381.         04h attach a KEYBOARD to a window (handle on top of stack)
  9382.         05h attach task's default KEYBOARD to a window
  9383.         06h open a task's OBJECTQ (task's handle on top of stack)
  9384.         07h open current task's OBJECTQ
  9385.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  9386.         0Dh (DV 2.26+) fill default window of parent of current task
  9387.      STACK: (if window)   DWORD character to fill with
  9388.         (if keyboard) DWORD handle of window to attach to
  9389.         (if pointer)  DWORD handle of window to attach to
  9390.         (if panel)    DWORD length of filename or resident panel
  9391.                   DWORD address of filename or resident panel
  9392.         (otherwise)   nothing
  9393. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  9394.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  9395.       the panel file
  9396.     result code of open may be retrieved with STATUS message
  9397.     logical cursor is left at scroll origin after filling window
  9398.     the task opening a mailbox becomes its owner, and the only task allowed
  9399.       to read the mailbox
  9400.     messages are only sent to a pointer object when the mouse is positioned
  9401.       in the window to which the pointer has been attached
  9402.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  9403.       messages automatically open the timer
  9404. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  9405. ----------1512--BH0D-------------------------
  9406. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  9407.     AH = 12h
  9408.     BH = 0Dh
  9409.     BL = object
  9410.         00h handle is DWORD on top of stack
  9411.         timer:      close
  9412.         keyboard: detach from window and discard queued input
  9413.         pointer:  stop taking input
  9414.         panel:      close
  9415.         mailbox:  close, unlock, and discard any pending messages
  9416.         02h close given task's mailbox (task's handle on top of stack)
  9417.         03h close task's default mailbox
  9418.         04h close KEYBOARD object (handle on top of stack)
  9419.         05h close task's default KEYBOARD
  9420.         06h close givent task's OBJECTQ (task's handle on top of stack)
  9421.         07h close current task's OBJECTQ
  9422. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  9423.       ERASE message (AH=12h/BH=0Eh)
  9424.     when a panel object is closed, the panel file and any panels currently
  9425.       in use are freed; window and keyboard objects created by APPLY are
  9426.       not affected, but field mode input ceases
  9427.     open but idle timer objects consume a small amount of CPU time
  9428. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  9429. ----------1512--BH0E-------------------------
  9430. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  9431.     AH = 12h
  9432.     BH = 0Eh
  9433.     BL = object
  9434.         00h handle is DWORD on top of stack
  9435.         window:      clear from scroll origin to end of window
  9436.         keyboard: discard input
  9437.         timer:      cancel current interval
  9438.         pointer:  discard all pending messages
  9439.         mailbox:  discard all pending messages
  9440.         01h clear task's default window from scroll origin to end
  9441.         02h discard all queued messages in mailbox (handle on top of stack)
  9442.         03h discard all queued messages in current task's default mailbox
  9443.         04h discard all input queued to KEYBOARD (handle on top of stack)
  9444.         05h discard all input queued to task's default KEYBOARD
  9445.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  9446.         07h remove all objects from current task's OBJECTQ
  9447.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  9448.         0Dh (DV 2.26+) clear default window of parent of current task
  9449. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  9450. SeeAlso: AH=12h/BH=02h
  9451. ----------1512--BH0F-------------------------
  9452. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  9453.     AH = 12h
  9454.     BH = 0Fh
  9455.     BL = object
  9456.         00h handle is DWORD on top of stack
  9457.         timer:     is it running?
  9458.         pointer: return status of last message
  9459.         panel:     verify success of last OPEN or APPLY
  9460.         02h return status of last msg READ from mailbox (handle on stack)
  9461.         03h return status of last msg READ from task's default mailbox
  9462.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  9463.         05h get status of last msg from task's default KEYBOARD
  9464.         06h return whether OBJECTQ is open or not (handle on top of stack)
  9465.         07h return whether task's default OBJECTQ is open or not
  9466. Return: DWORD on top of stack is status
  9467. Notes:    if object is a panel object, the status indicates the error code:
  9468.       00h successful
  9469.       14h panel name not in panel directory
  9470.       15h not enough memory to apply panel
  9471.       16h invalid panel format
  9472.       17h panel file already open
  9473.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  9474.       95h not enough memory to open panel file     > that the panel was
  9475.       98h null panel file name            /  not opened
  9476.     if object is a timer, the status is:
  9477.       00000000h open but not running
  9478.       40000000h open and running
  9479.       80000000h closed
  9480.     if object is an OBJECTQ, the status is:
  9481.       00000000h open
  9482.       80000000h closed
  9483.     if object is a keyboard in keystroke mode, the status is the extended
  9484.       character code (scan code) of teh last keystroke
  9485.     if object is a keyboard in field mode, the status indicates the reason
  9486.       for the last return from the field manager
  9487.       00h Enter key pressed
  9488.       01h Button 1 or keystroke selection
  9489.       02h Button 2
  9490.       03h validation
  9491.       04h auto Enter on field
  9492.       1Bh Escape pressed
  9493.       46h ^Break pressed
  9494.       other: extended code for key terminating input
  9495.     the status of mailbox messages sent by the window manager is always 80h
  9496.     the status of a pointer message is the same as the status field in the
  9497.       message
  9498. SeeAlso: AH=12h/BH=04h"READ"
  9499. ----------1512--BH10-------------------------
  9500. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  9501.     AH = 12h
  9502.     BH = 10h
  9503.     BL = object
  9504.         00h handle is DWORD on top of stack
  9505.         window: return TRUE if logical cursor past end of window
  9506.         mailbox: ???
  9507.         01h returns TRUE if logical cursor past end of task's def window
  9508.         02h return ??? for task's mailbox (task's handle on top of stack)
  9509.         03h return ??? for current task's mailbox
  9510.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  9511.         0Dh (DV 2.26+) check log cursor of window of parent task
  9512. Return: DWORD on top of stack is status
  9513. ----------1512--BH11-------------------------
  9514. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  9515.     AH = 12h
  9516.     BH = 11h
  9517.     BL = window for which to move cursor
  9518.         00h window's handle is DWORD on top of stack
  9519.         01h task's default window
  9520.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  9521.         0Dh (DV 2.26+) default window of parent of current task
  9522.     STACK: DWORD column
  9523.            DWORD row
  9524. ----------1512--BH11-------------------------
  9525. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  9526.     AH = 12h
  9527.     BH = 11h
  9528.     BL = mailbox to name
  9529.         00h DWORD on top of stack is mailbox handle
  9530.         02h use given task's mailbox (task's handle on top of stack)
  9531.         03h use current task's default mailbox
  9532.     STACK: DWORD length of name
  9533.            DWORD address of name
  9534. SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
  9535. ----------1512--BX1100-----------------------
  9536. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  9537.     AH = 12h
  9538.     BX = 1100h
  9539.     STACK: DWORD object handle for pointer object
  9540.            DWORD number of colums to scale pointer position to
  9541.            DWORD number of rows to scale pointer position to
  9542. SeeAlso: AH=12h/BX=1200h
  9543. ----------1512--BH12-------------------------
  9544. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  9545.     AH = 12h
  9546.     BH = 12h
  9547.     BL = window to read from
  9548.         00h handle is DWORD on top of stack
  9549.         01h read next N chars or attributes on task's default window
  9550.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  9551.         0Dh (DV 2.26+) read default window of parent of current task
  9552.     STACK: DWORD count
  9553. Return: STACK: DWORD number of bytes actually read
  9554.            DWORD address of buffer containing data
  9555. Notes:    reading starts at the current logical cursor position; the cursor is
  9556.       updated to point at the character following the last one read
  9557.     any translucent blanks (FFh) which are visible on screen are changed
  9558.       to the character which is seen through them
  9559.     the string produced by the read is placed in an input buffer which may
  9560.       be reused by the next READ or READN of a window
  9561.     window stream opcodes D8h and D9h determine whether the read returns
  9562.       characters or attributes
  9563. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  9564. ----------1512--BH12-------------------------
  9565. INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
  9566.     AH = 12h
  9567.     BH = 12h
  9568.     BL = mailbox for which to retrieve name
  9569.         00h DWORD on top of stack is mailbox handle
  9570.         02h use given task's mailbox (task's handle on top of stack)
  9571.         03h use current task's default mailbox
  9572.     STACK: DWORD length of buffer for name
  9573.            DWORD pointer to buffer
  9574. Return: STACK: DWORD length of returned name (or size of buffer, if less)
  9575. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  9576. Note:    the returned name is not NUL-terminated
  9577. SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
  9578. ----------1512--BX1200-----------------------
  9579. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  9580.     AH = 12h
  9581.     BX = 1200h
  9582.     STACK: DWORD object handle for pointer
  9583. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  9584.            DWORD pointer pos scaled as if window were this many rows high
  9585. SeeAlso: AH=12h/BX=1100h
  9586. ----------1512--BH13-------------------------
  9587. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  9588.     AH = 12h
  9589.     BH = 13h
  9590.     BL = window object
  9591.         00h DWORD on top of stack is handle for window to redraw
  9592.         01h redraw task's default window
  9593.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  9594.         0Dh (DV 2.26+) redraw default window of parent of current task
  9595. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  9596. ----------1512--BH13-------------------------
  9597. INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
  9598.     AH = 12h
  9599.     BH = 13h
  9600.     BL = mailbox from which to read
  9601.         00h DWORD on top of stack is mailbox handle
  9602.         02h use given task's mailbox (task's handle on top of stack)
  9603.         03h use current task's default mailbox
  9604.     STACK: DWORD size of buffer in bytes
  9605.            DWORD pointer to buffer
  9606. Return: STACK: DWORD number of bytes read
  9607. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  9608. Notes:    this call blocks if no input is available, but will return less than
  9609.       the requested number of bytes if some (but insufficient) data is
  9610.       available
  9611.     use this call instead of AH=12h/BH=04h if the mailbox has flag bits
  9612.       4 or 5 set, as common memory may be exhausted by that call when
  9613.       attempting to read the next message
  9614. SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
  9615. ----------1512--BX1300-----------------------
  9616. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  9617.     AH = 12h
  9618.     BX = 1300h
  9619.     STACK: DWORD object handle for pointer
  9620.            DWORD character to use for pointer
  9621. ----------1512--BH14-------------------------
  9622. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  9623.     AH = 12h
  9624.     BH = 14h
  9625.     BL = message modifier
  9626.         00h handle is DWORD on top of stack
  9627.         01h define user stream
  9628.         04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  9629.         05h intercept keystrokes from task's default KEYBOARD to a window
  9630.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  9631.                  DWORD address of FAR user stream handler
  9632.            (if keyboard) DWORD address of FAR filter function
  9633.  
  9634. The keyboard filter function is called when the keyboard is in field mode.  On
  9635. entry,
  9636.     AL = character
  9637.     AH = 00h or extended ASCII code if AL = 00h
  9638.     BL = field number
  9639.     CH = cursor column
  9640.     CL = cursor row
  9641.     DL = field type modifier (sixth item in field table entry)
  9642.     DH = seventh item in field table entry
  9643.     ES:SI = window's handle
  9644.     DS:DI -> field table entry for field containing the cursor
  9645. The filter function should return
  9646.     AH = 00h use keystroke
  9647.          01h ignore keystroke
  9648.          FFh beep and ignore keystroke
  9649. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  9650. ----------1512--BH14-------------------------
  9651. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  9652.     AH = 12h
  9653.     BH = 14h
  9654.     BL = object
  9655.         00h mailbox handle is DWORD on top of stack
  9656.         02h use given task's mailbox (task's handle on top of stack)
  9657.         03h use current task's default mailbox
  9658. Note:    release exclusive access by sending CLOSE message to mailbox
  9659.     access may be requested multiple times, and requires multiple CLOSEs
  9660. SeeAlso: AH=12h/BH=0Dh
  9661. ----------1512--BH15-------------------------
  9662. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  9663.     AH = 12h
  9664.     BH = 15h
  9665.     BL = object
  9666.         00h DWORD on top of stack
  9667.         mailbox, keyboard, or pointer only
  9668.         02h mailbox for task whose handle is on top of stack
  9669.         03h mailbox for current task
  9670.         04h keyboard for task whose handle is on top of stack
  9671.         05h keyboard for current task
  9672.     STACK: DWORD flags
  9673.         if mailbox:
  9674.             bit 0: all mail messages in common memory
  9675.             bit 1: allow write even if closed
  9676.             bit 2: don't erase messages when mailbox closed
  9677.             bit 4: (DV/X) append messages with like status and
  9678.                 sender (stream-oriented mail)
  9679.             bit 5: (DV/X) store mail in expanded memory (pool
  9680.                 grows as needed)
  9681.             bit 6: (DV/X) make mailbox into non-owned mailbox
  9682.         if keyboard:
  9683.             bit 5: exclusive input when keyboard in use for input
  9684. Return: nothing
  9685. Notes:    only available if the API level has been set to at least 2.20
  9686.     equivalent to performing SUBFROM and ADDTO calls on the object
  9687.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  9688.       "READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
  9689. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  9690. ----------1512--BH16-------------------------
  9691. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  9692.     AH = 12h 
  9693.     BH = 16h
  9694.     BL = object
  9695.         00h DWORD on top of stack
  9696.         mailbox, keyboard, or pointer only
  9697.         02h mailbox for task whose handle is on top of stack
  9698.         03h mailbox for current task
  9699.         04h keyboard for task whose handle is on top of stack
  9700.         05h keyboard for current task
  9701. Return: STACK: DWORD current control flags (see AH=12h/BH=15h)
  9702. Notes:    only available if the API level has been set to at least 2.20
  9703.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  9704.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  9705. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
  9706. ----------1512--BH17-------------------------
  9707. INT 15 - DESQview v2.42-2.52 - BUG
  9708.     AH = 12h
  9709.     BH = 17h
  9710.     BL = object
  9711.         00h DWORD on top of stack
  9712.         mailbox, keyboard, or pointer only
  9713.         02h mailbox for task whose handle is on top of stack
  9714.         03h mailbox for current task
  9715.         04h keyboard for task whose handle is on top of stack
  9716.         05h keyboard for current task
  9717. Notes:    due to a fencepost error, message 17h is accepted for mailboxes,
  9718.       keyboards, and pointers, but causes a random branch
  9719.     DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
  9720. ----------1512--BH80-------------------------
  9721. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9722.     AH = 12h
  9723.     BH = 80h
  9724. Note:    this function is identical to AH=12h/BH=00h, except that DESQview will
  9725.       not pop up a "Programming Error" window, instead returning an error
  9726.       code in AL:
  9727.         00h no error
  9728.         01h invalid values
  9729.         02h alias invalid
  9730.         03h handle valid but wrong type
  9731.         04h invalid handle
  9732. SeeAlso: AH=12h/BH=00h
  9733. ----------1512--BH81-------------------------
  9734. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9735.     AH = 12h
  9736.     BH = 81h
  9737. Note:    this function is identical to AH=12h/BH=01h, except that DESQview will
  9738.       not pop up a "Programming Error" window, instead returning an error
  9739.       code in AL (see AH=12h/BH=80h)
  9740. SeeAlso: AH=12h/BH=01h
  9741. ----------1512--BH82-------------------------
  9742. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9743.     AH = 12h
  9744.     BH = 82h
  9745. Note:    this function is identical to AH=12h/BH=02h, except that DESQview will
  9746.       not pop up a "Programming Error" window, instead returning an error
  9747.       code in AL (see AH=12h/BH=80h)
  9748. SeeAlso: AH=12h/BH=02h
  9749. ----------1512--BH83-------------------------
  9750. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9751.     AH = 12h
  9752.     BH = 83h
  9753. Note:    this function is identical to AH=12h/BH=03h, except that DESQview will
  9754.       not pop up a "Programming Error" window, instead returning an error
  9755.       code in AL (see AH=12h/BH=80h)
  9756. SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
  9757. ----------1512--BH84-------------------------
  9758. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9759.     AH = 12h
  9760.     BH = 84h
  9761. Note:    this function is identical to AH=12h/BH=04h, except that DESQview will
  9762.       not pop up a "Programming Error" window, instead returning an error
  9763.       code in AL (see AH=12h/BH=80h)
  9764. SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
  9765. ----------1512--BH85-------------------------
  9766. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9767.     AH = 12h
  9768.     BH = 85h
  9769. Note:    this function is identical to AH=12h/BH=05h, except that DESQview will
  9770.       not pop up a "Programming Error" window, instead returning an error
  9771.       code in AL (see AH=12h/BH=80h)
  9772. SeeAlso: AH=12h/BH=05h
  9773. ----------1512--BH86-------------------------
  9774. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9775.     AH = 12h
  9776.     BH = 86h
  9777. Note:    this function is identical to AH=12h/BH=06h, except that DESQview will
  9778.       not pop up a "Programming Error" window, instead returning an error
  9779.       code in AL (see AH=12h/BH=80h)
  9780. SeeAlso: AH=12h/BH=06h
  9781. ----------1512--BH87-------------------------
  9782. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9783.     AH = 12h
  9784.     BH = 87h
  9785. Note:    this function is identical to AH=12h/BH=07h, except that DESQview will
  9786.       not pop up a "Programming Error" window, instead returning an error
  9787.       code in AL (see AH=12h/BH=80h)
  9788. SeeAlso: AH=12h/BH=07h
  9789. ----------1512--BH88-------------------------
  9790. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9791.     AH = 12h
  9792.     BH = 88h
  9793. Note:    this function is identical to AH=12h/BH=08h, except that DESQview will
  9794.       not pop up a "Programming Error" window, instead returning an error
  9795.       code in AL (see AH=12h/BH=80h)
  9796. SeeAlso: AH=12h/BH=08h
  9797. ----------1512--BH89-------------------------
  9798. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9799.     AH = 12h
  9800.     BH = 89h
  9801. Note:    this function is identical to AH=12h/BH=09h, except that DESQview will
  9802.       not pop up a "Programming Error" window, instead returning an error
  9803.       code in AL (see AH=12h/BH=80h)
  9804. SeeAlso: AH=12h/BH=09h
  9805. ----------1512--BH8A-------------------------
  9806. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9807.     AH = 12h
  9808.     BH = 8Ah
  9809. Note:    this function is identical to AH=12h/BH=0Ah, except that DESQview will
  9810.       not pop up a "Programming Error" window, instead returning an error
  9811.       code in AL (see AH=12h/BH=80h)
  9812. SeeAlso: AH=12h/BH=0Ah
  9813. ----------1512--BH8B-------------------------
  9814. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9815.     AH = 12h
  9816.     BH = 8Bh
  9817. Note:    this function is identical to AH=12h/BH=0Bh, except that DESQview will
  9818.       not pop up a "Programming Error" window, instead returning an error
  9819.       code in AL (see AH=12h/BH=80h)
  9820. SeeAlso: AH=12h/BH=0Bh
  9821. ----------1512--BH8C-------------------------
  9822. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9823.     AH = 12h
  9824.     BH = 8Ch
  9825. Note:    this function is identical to AH=12h/BH=0Ch, except that DESQview will
  9826.       not pop up a "Programming Error" window, instead returning an error
  9827.       code in AL (see AH=12h/BH=80h)
  9828. SeeAlso: AH=12h/BH=0Ch
  9829. ----------1512--BH8D-------------------------
  9830. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9831.     AH = 12h
  9832.     BH = 8Dh
  9833. Note:    this function is identical to AH=12h/BH=0Dh, except that DESQview will
  9834.       not pop up a "Programming Error" window, instead returning an error
  9835.       code in AL (see AH=12h/BH=80h)
  9836. SeeAlso: AH=12h/BH=0Dh
  9837. ----------1512--BH8E-------------------------
  9838. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9839.     AH = 12h
  9840.     BH = 8Eh
  9841. Note:    this function is identical to AH=12h/BH=0Eh, except that DESQview will
  9842.       not pop up a "Programming Error" window, instead returning an error
  9843.       code in AL (see AH=12h/BH=80h)
  9844. SeeAlso: AH=12h/BH=0Eh
  9845. ----------1512--BH8F-------------------------
  9846. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9847.     AH = 12h
  9848.     BH = 8Fh
  9849. Note:    this function is identical to AH=12h/BH=0Fh, except that DESQview will
  9850.       not pop up a "Programming Error" window, instead returning an error
  9851.       code in AL (see AH=12h/BH=80h)
  9852. SeeAlso: AH=12h/BH=0Fh
  9853. ----------1512--BH90-------------------------
  9854. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9855.     AH = 12h
  9856.     BH = 90h
  9857. Note:    this function is identical to AH=12h/BH=10h, except that DESQview will
  9858.       not pop up a "Programming Error" window, instead returning an error
  9859.       code in AL (see AH=12h/BH=80h)
  9860. SeeAlso: AH=12h/BH=10h
  9861. ----------1512--BH91-------------------------
  9862. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9863.     AH = 12h
  9864.     BH = 91h
  9865. Note:    this function is identical to AH=12h/BH=11h, except that DESQview will
  9866.       not pop up a "Programming Error" window, instead returning an error
  9867.       code in AL (see AH=12h/BH=80h)
  9868. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
  9869. ----------1512--BH92-------------------------
  9870. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9871.     AH = 12h
  9872.     BH = 92h
  9873. Note:    this function is identical to AH=12h/BH=12h, except that DESQview will
  9874.       not pop up a "Programming Error" window, instead returning an error
  9875.       code in AL (see AH=12h/BH=80h)
  9876. SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
  9877. ----------1512--BH93-------------------------
  9878. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9879.     AH = 12h
  9880.     BH = 93h
  9881. Note:    this function is identical to AH=12h/BH=13h, except that DESQview will
  9882.       not pop up a "Programming Error" window, instead returning an error
  9883.       code in AL (see AH=12h/BH=80h)
  9884. SeeAlso: AH=12h/BH=13h
  9885. ----------1512--BH94-------------------------
  9886. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9887.     AH = 12h
  9888.     BH = 94h
  9889. Note:    this function is identical to AH=12h/BH=14h, except that DESQview will
  9890.       not pop up a "Programming Error" window, instead returning an error
  9891.       code in AL (see AH=12h/BH=80h)
  9892. SeeAlso: AH=12h/BH=14h
  9893. ----------1512--BH95-------------------------
  9894. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9895.     AH = 12h
  9896.     BH = 95h
  9897. Note:    this function is identical to AH=12h/BH=15h, except that DESQview will
  9898.       not pop up a "Programming Error" window, instead returning an error
  9899.       code in AL (see AH=12h/BH=80h)
  9900. SeeAlso: AH=12h/BH=15h
  9901. ----------1512--BH96-------------------------
  9902. INT 15 - DESQview v2.50+ - SEND MESSAGE WITH ERROR RECOVERY
  9903.     AH = 12h
  9904.     BH = 96h
  9905. Note:    this function is identical to AH=12h/BH=16h, except that DESQview will
  9906.       not pop up a "Programming Error" window, instead returning an error
  9907.       code in AL (see AH=12h/BH=80h)
  9908. SeeAlso: AH=12h/BH=16h
  9909. ----------1513-------------------------------
  9910. INT 15 - VMiX - "sys_wake" - WAKE SLEEPING PROCESS
  9911.     AH = 13h
  9912.     STACK:    WORD    process ID
  9913. Return: AX = status (SYS_OK or SYS_ERROR)
  9914. SeeAlso: AH=12h"VMiX"
  9915. ----------1513-------------------------------
  9916. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  9917.     AH = 13h
  9918. Return: BX:AX -> task control block (see below)
  9919. SeeAlso: AH=15h"MultiDOS"
  9920.  
  9921. Format of MultiDOS Plus v4.0 task control block:
  9922. Offset    Size    Description
  9923.  00h    DWORD    pointer to next TCB
  9924.  04h  8 BYTEs    ASCIZ task name
  9925.  0Ch  2 BYTEs    ???
  9926.  0Eh    WORD    task PSP segment
  9927.  10h    WORD    abort/suspend flags
  9928.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  9929.  14h    WORD    priority level (0000h-FFFEh)
  9930.  16h    WORD    time slice counter
  9931.  18h  2 BYTEs    ???
  9932.  1Ah    WORD    suspend timer value
  9933.  1Ch    WORD    stack segment
  9934.  1Eh    WORD    stack pointer
  9935.  20h    WORD    display type
  9936.  22h    WORD    display memory
  9937.  24h  2 BYTEs    ???
  9938.  26h    WORD    termination count
  9939.  28h    WORD    equipment flag for BIO10 driver
  9940.  2Ah    BYTE    background CRT mode
  9941.  2Bh    WORD    screen width in columns
  9942.  2Dh    WORD    screen size in bytes
  9943.  2Fh    WORD    segment of physical screen memory
  9944.  31h 16 BYTEs    eight cursor positions
  9945.  41h    WORD    current cursor shape
  9946.  43h    BYTE    active display page
  9947.  44h    WORD    CRT controller I/O port base
  9948.  46h  2 BYTEs    ???
  9949.  48h    WORD    foreground task flag
  9950.  4Ah  6 BYTEs    ???
  9951.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  9952.  52h    DWORD    old INT 22
  9953.  56h    DWORD    old INT 23
  9954.  5Ah    DWORD    old INT 24
  9955.  5Eh    WORD    top of memory for task
  9956.  60h  4 BYTEs    ???
  9957.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  9958.  66h    WORD    DTA offset
  9959.  68h  4 BYTEs    ???
  9960.  6Ch    BYTE    current ANSI.SYS attribute
  9961.  6Dh    BYTE    current ANSI.SYS column
  9962.  6Eh    BYTE    current ANSI.SYS row
  9963.  6Fh    BYTE    current ANSI.SYS display state
  9964.  70h    BYTE    maximum ANSI.SYS columns
  9965.  71h    BYTE    current ANSI.SYS page
  9966.  72h    WORD    saved ANSI.SYS cursor position
  9967.  74h    BYTE    ANSI.SYS parameter buffer index
  9968.  75h    BYTE    current ANSI.SYS screen mode
  9969.  76h    BYTE    ANSI.SYS wrap flag
  9970.  77h  6 BYTEs    ANSI.SYS parameter buffer
  9971.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  9972.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  9973.  85h  3 BYTEs    ???
  9974.  88h 16 BYTEs    request header for DOS driver calls
  9975.  98h 14 BYTEs    ???
  9976.  A6h    WORD    segment of EMS map if EMS task
  9977.  A8h    WORD    flag: task makes EMS calls
  9978.  AAh    WORD    EMS handle for task
  9979.  ACh    WORD    keyboard shift state
  9980.  AEh 12 BYTEs    ???
  9981.  BAh    WORD    TCB of parent if child task
  9982.  BCh    WORD    termination code
  9983.  BEh    WORD    COM port number
  9984.  C0h  4 BYTEs    ???
  9985.  C4h    WORD    current IRQ number
  9986.  C6h  2 BYTEs    ???
  9987.  C8h    WORD    miscellaneous flag word
  9988.  CAh  2 BYTEs    ???
  9989.  CCh    DWORD    old INT 10
  9990.  D0h    WORD    EMS alternate map set number
  9991.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  9992. ----------1514-------------------------------
  9993. INT 15 - VMiX - "sys_clrwindow" - CLEAR WINDOW
  9994.     AH = 14h
  9995.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  9996.         WORD    bottom right corner of window (high = row, low = col)
  9997. Return: AX = status (SYS_OK)
  9998. Note:    clears window to color set with "sys_setcolors" (AH=18h)
  9999. SeeAlso: AH=15h"VMiX",AH=16h"VMiX",AH=18h"VMiX",AH=1Fh"VMiX"
  10000. ----------1514-------------------------------
  10001. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  10002.     AH = 14h
  10003. Return: AX = current state
  10004.         0000h MultiDOS Plus command prompt is background task
  10005.         0001h command prompt is foreground task
  10006. SeeAlso: AH=0Bh"MultiDOS"
  10007. ----------1515-------------------------------
  10008. INT 15 - VMiX - "sys_setbwindow" - SET BANNER WINDOW MESSAGE
  10009.     AH = 15h
  10010.     STACK:    DWORD    pointer to ASCIZ banner    message for top of screen
  10011. Return: AX = status (SYS_OK)
  10012. SeeAlso: AH=14h"VMiX",AH=16h"VMiX"
  10013. ----------1515-------------------------------
  10014. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  10015.     AH = 15h
  10016. Return: BX:AX -> system block (see below)
  10017. SeeAlso: AH=13h"MultiDOS"
  10018.  
  10019. Format of MultiDOS Plus 4.0 system block:
  10020. Offset    Size    Description
  10021.  00h    WORD    segment of system control block
  10022.  02h    WORD    redirection flag set by /NOREDIRECT
  10023.  04h    WORD    no-INT 10 flag set by /NO10
  10024.  06h    DWORD    old INT 10
  10025.  0Ah    DWORD    new INT 10
  10026.  0Eh    DWORD    pointer to WORD with current TCB offset (see AH=13h)
  10027.  12h    DWORD    pointer to WORD with idle task TCB offset
  10028.  16h    DWORD    pointer to WORD with foreground TCB offset
  10029.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset
  10030.  1Eh    WORD    Task Control Block size
  10031.  20h    WORD    number of TCBs
  10032.  22h    WORD    flag: EMS present
  10033.  24h    WORD    EMS page frame base segment
  10034.  26h    WORD    16K pages in EMS page frame
  10035.  28h    WORD    base segment for conventional memory tasks
  10036.  2Ah    WORD    conventional memory size in paragraphs
  10037.  2Ch    DWORD    pointer to list of queue pointers
  10038. ----------1516-------------------------------
  10039. INT 15 - VMiX - "sys_setwindow" - SET ROOT WINDOW SIZE AND HOME CURSOR
  10040.     AH = 16h
  10041.     STACK:    DWORD    pointer to I/O Request Packet
  10042.         WORD    top left corner of window (high byte = row, low = col)
  10043.         WORD    bottom right corner of window (high = row, low = col)
  10044. Return: AX = status (SYS_OK or SYS_ERROR)
  10045. SeeAlso: AH=14h"VMiX",AH=17h"VMiX"
  10046. ----------1516-------------------------------
  10047. INT 15 - MultiDOS Plus - INITIALIZATION
  10048.     AH = 16h
  10049. Note:    used internally during initialization; any other calls will cause
  10050.       unpredicatable results
  10051. ----------1517-------------------------------
  10052. INT 15 - VMiX - "sys_getcolors" - GET CONSOLE WINDOW COLORS
  10053.     AH = 17h
  10054. Return: AH = foreground color
  10055.     AL = background color
  10056. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  10057. ----------1517-------------------------------
  10058. INT 15 - MultiDOS Plus - MAP IRQ
  10059.     AH = 17h
  10060.     AL = IRQ to map (01h-0Fh)
  10061.     BX = offset of task control block (see AH=13h) to associate with IRQ
  10062. Return: AX = status
  10063.         0000h successful
  10064.         other invalid IRQ
  10065. Note:    the EMS map of the specified TCB is associated with the given interrupt
  10066. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  10067. ----------1518-------------------------------
  10068. INT 15 - VMiX - "sys_setcolors" - SET CONSOLE COLORS
  10069.     AH = 18h
  10070.     STACK:    WORD    new background/foreground colors
  10071.             bits 3-0: foreground
  10072.             bits 7-4: background
  10073.             bits 15-8: unused
  10074. Return: AX = color
  10075. SeeAlso: AH=14h"VMiX",AH=17h"VMiX",AH=19h"VMiX"
  10076. ----------1518-------------------------------
  10077. INT 15 - MultiDOS Plus - UNMAP IRQ
  10078.     AH = 18h
  10079.     AL = IRQ to unmap (01h-0Fh)
  10080. Return: AX = status
  10081.         0000h successful
  10082.         0001h invalid IRQ
  10083. Note:    results are unpredictable if the IRQ has not been mapped
  10084. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  10085. ----------1519-------------------------------
  10086. INT 15 - VMiX v2+ - "sys_setconwn" - SET WINDOW COLORS
  10087.     AH = 19h
  10088.     STACK:    WORD    new background/foreground colors
  10089.             bits 3-0: foreground
  10090.             bits 7-4: background
  10091.             bits 15-8: unused
  10092. Return: AX = color
  10093. SeeAlso: AH=18h"VMiX"
  10094. ----------1519-------------------------------
  10095. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  10096.     AH = 19h
  10097. Return: AX destroyed
  10098. Note:    for MultiDOS internal use only
  10099. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  10100. ----------151A-------------------------------
  10101. INT 15 - VMiX v2+ - "sys_sint" - INVOKE SOFTWARE INTERRUPT
  10102.     AH = 1Ah
  10103.     STACK:    WORD    interrupt number
  10104.         DWORD    pointer to register structure
  10105. Return: AX = returned flags
  10106. ----------151A-------------------------------
  10107. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  10108.     AH = 1Ah
  10109.     DS:SI -> 8-byte name
  10110. Return: AL = status
  10111.         00h successful
  10112.         AH = semaphore number (20h-3Fh)
  10113.         04h out of string space
  10114. Notes:    all eight bytes of the name are significant
  10115.     if the name does not already exist, it is added to the name table and
  10116.       associated with a free semaphore number
  10117.     names cannot be destroyed
  10118. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  10119. ----------151B-------------------------------
  10120. INT 15 - VMiX v2+ - "sys_blkmov" - MOVE MEMORY BLOCK
  10121.     AH = 1Bh
  10122.     STACK:    DWORD    source address
  10123.         DWORD    destination address
  10124.         WORD    number of words to move
  10125. Return: nothing
  10126. ----------151B-------------------------------
  10127. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  10128.     AH = 1Bh
  10129.     DS:SI -> 8-byte name
  10130. Return: AH = status
  10131.         00h successful
  10132.         02h invalid semaphore number
  10133.         03h caller already owns semaphore
  10134.         04h out of string space
  10135. Notes:    (see AH=01h"MultiDOS")
  10136.     equivalent to AH=1Ah followed by AH=01h
  10137. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  10138. ----------151C-------------------------------
  10139. INT 15 - VMiX v2+ - "sys_bitblt" - PUT GRAPHICAL OBJECT AT CURSOR POSITION
  10140.     AH = 1Ch
  10141.     STACK:    WORD    AND/OR pixel with background (00h = OR, 01h = AND)
  10142.         DWORD    pointer to object bitmap
  10143.         WORD    object width in pixels
  10144.         WORD    object height in pixels
  10145. Return: nothing
  10146. SeeAlso: AH=1Dh"VMiX"
  10147. ----------151C-------------------------------
  10148. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  10149.     AH = 1Ch
  10150.     DS:SI -> 8-byte name
  10151. Return: AH = status
  10152.         00h successful
  10153.         01h not semaphore owner
  10154.         02h invalid semaphore number
  10155.         04h out of string space
  10156. Notes:    (see AH=02h"MultiDOS")
  10157.     equivalent to AH=1Ah followed by AH=02h
  10158. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  10159. ----------151D-------------------------------
  10160. INT 15 - VMiX v2+ - "sys_getfont" - GET CURRENT CONSOLE GRAPHICS FONT
  10161.     AH = 1Dh
  10162. Return: AX = current font number (00h-03h)
  10163. SeeAlso: AH=1Ch"VMiX",AH=1Eh"VMiX"
  10164. ----------151D-------------------------------
  10165. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  10166.     AH = 1Dh
  10167.     DS:SI -> 8-byte name
  10168. Return; AH = status
  10169.         00h semaphore not in use
  10170.         01h semaphore owned by another task
  10171.         02h invalid semaphore number
  10172.         03h caller owns semaphore
  10173.         04h out of string space
  10174. Notes:    (see AH=10h"MultiDOS")
  10175.     equivalent to AH=1Ah followed by AH=10h
  10176. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  10177. ----------151E-------------------------------
  10178. INT 15 - VMiX v2+ - "sys_setfont" - SET CONSOLE GRAPHICS FONT
  10179.     AH = 1Eh
  10180.     STACK: WORD new font number (00h-03h)
  10181. Return: AX = current font number (00h-03h)
  10182. SeeAlso: AH=1Dh"VMiX"
  10183. ----------151E00-----------------------------
  10184. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  10185.     AX = 1E00h
  10186.     DX = event/trigger number (00h-3Fh)
  10187. Return: AH = status
  10188.         00h successful
  10189. SeeAlso: AX=1E01h,AX=1E02h
  10190. ----------151E01-----------------------------
  10191. INT 15 - MultiDOS Plus - TRIGGER EVENT
  10192.     AX = 1E01h
  10193.     DX = event/trigger number (00h-3Fh)
  10194. Return: AH = status
  10195.         00h successful
  10196.         01h invalid event/trigger number
  10197. Notes:    schedules any task waiting for event; if no task is waiting, the event
  10198.       counter is incremented (and will roll over if it was 65535)
  10199.     may be invoked by interrupt handler
  10200. SeeAlso: AX=1E00h,AX=1E02h
  10201. ----------151E02-----------------------------
  10202. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  10203.     AX = 1E02h
  10204.     DX = event/trigger number (00h-3Fh)
  10205. Return: AH = status
  10206.         00h successful
  10207.         01h invalid event/trigger number
  10208. Note:    if the event counter is zero, the task is suspended until the event is
  10209.       triggered with AX=1E01h; else, the counter is decremented and the
  10210.       call returns immediately
  10211. SeeAlso: AX=1E00h,AX=1E01h
  10212. ----------151F-------------------------------
  10213. INT 15 - VMiX v2.???+ - "sys_scrollwin" - SCROLL WINDOW
  10214.     AH = 1Fh
  10215.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  10216.         WORD    bottom right corner of window
  10217. Return: AX = status (SYS_OK)
  10218. SeeAlso: AH=14h"VMiX",AH=18h"VMiX"
  10219. ----------151F-------------------------------
  10220. INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
  10221.     AH = 1Fh
  10222. Return: BX = first segment of conventional memory
  10223.     DX = first segment of EMS swap frame into which MultiDOS will load
  10224.         programs
  10225. ----------1520-------------------------------
  10226. INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
  10227.     AH = 20h
  10228. Return: AX = current state
  10229.         0000h multitasking enabled
  10230.         other TCB of task that disabled multitasking
  10231. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  10232. ----------152000-----------------------------
  10233. INT 15 - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  10234.     AX = 2000h
  10235. SeeAlso: AX=2001h
  10236. ----------152001-----------------------------
  10237. INT 15 - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
  10238.     AX = 2001h
  10239.     ES:BX -> byte which is to be incremented while in a DOS call
  10240. SeeAlso: AX=2000h
  10241. ----------152010-----------------------------
  10242. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  10243.     AX = 2010h
  10244.     ???
  10245. Return: ???
  10246. SeeAlso: AX=2011h
  10247. ----------152011-----------------------------
  10248. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  10249.     AX = 2011h
  10250.     ???
  10251. Return: ???
  10252. SeeAlso: AX=2010h
  10253. ----------1521-------------------------------
  10254. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  10255.     AH = 21h
  10256.     AL = subfunction
  10257.         00h read POST log
  10258.         01h write POST log
  10259.         BH = device ID
  10260.         BL = error code
  10261. Return: CF set on error
  10262.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  10263.     if function 00h:
  10264.        BX = number of error codes stored
  10265.        ES:DI -> error log
  10266. Note:    the log is a series of words, the first byte of which identifies the
  10267.       error code and the second the device.
  10268. ----------1522-------------------------------
  10269. INT 15 U - SYSTEM - LOCATE ROM BASIC (later PS/2's only)
  10270.     AH = 22h
  10271. Return: CF set on error
  10272.         AH = status
  10273.     CF clear on success:
  10274.         ES -> segment of ROM BASIC
  10275. ----------152400-----------------------------
  10276. INT 15 - Qualitas 386MAX v6.01 - TURN ON ???
  10277.     AX = 2400h
  10278. Return: CF clear
  10279.     AH = 00h
  10280. SeeAlso: AX=2401h,AX=2402h
  10281. ----------152401-----------------------------
  10282. INT 15 - Qualitas 386MAX v6.01 - TURN OFF ???
  10283.     AX = 2401h
  10284. Return: CF clear
  10285.     AH = 00h
  10286. SeeAlso: AX=2400h,AX=2402h
  10287. ----------152402-----------------------------
  10288. INT 15 - Qualitas 386MAX v6.01 - GET STATE OF ???
  10289.     AX = 2402h
  10290. Return: CF clear
  10291.     AH = 00h
  10292.     AL = current state (00h off, 01h on)
  10293. SeeAlso: AX=2400h,AX=2401h
  10294. ----------152403-----------------------------
  10295. INT 15 - Qualitas 386MAX v6.01 - GET ???
  10296.     AX = 2403h
  10297.     ???
  10298. Return: CF clear
  10299.     AH = 00h
  10300.     BX = bit flags???
  10301.         bit 0: ???
  10302.         bit 1: ???
  10303. Note:    reportedly also used by some PS/2 models
  10304. ----------1540-------------------------------
  10305. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  10306.     AH = 40h
  10307.     AL = subfunction
  10308.         00h get system profile in CX and BX
  10309.         01h set system profile from CX and BX
  10310.         02h get internal modem profile in BX
  10311.         03h set internal modem profile from BX
  10312. ----------154000-----------------------------
  10313. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  10314.     AX = 4000h
  10315. Return: AX = 4000h
  10316.     CL = 00h timeout disabled
  10317.        else timeout in minutes
  10318. SeeAlso: AX=4001h,AX=4600h
  10319. ----------154001CL00-------------------------
  10320. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  10321.     AX = 4001h
  10322.     CL = 00h timeout disabled
  10323.        else     timeout in minutes
  10324. Return: AL = 00h timeout modified
  10325.          01h timeout cannot be modified
  10326.          40h timeout cannot be modified
  10327.     CL = 00h timeout disabled
  10328.        else timeout in minutes
  10329. SeeAlso: AX=4000h,AX=4601h
  10330. ----------1541-------------------------------
  10331. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE)
  10332.     AH = 41h
  10333.     AL = condition type
  10334.         bits 0-2: condition to wait for
  10335.              0 any external event
  10336.              1 compare and return if equal
  10337.              2 compare and return if not equal
  10338.              3 test and return if not zero
  10339.              4 test and return if zero
  10340.         bit 3:    reserved
  10341.         bit 4:    1=port address, 0=user byte
  10342.         bits 5-7: reserved
  10343.     BH = condition compare or mask value
  10344.     BL = timeout value times 55 milliseconds
  10345.         00h means no timeout
  10346.     DX = I/O port address if AL bit 4 set
  10347.     ES:DI -> user byte if AL bit 4 clear
  10348. ----------1542-------------------------------
  10349. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
  10350.     AH = 42h
  10351.     AL = 00h to use system profile
  10352.          01h to force suspend regardless of system profile
  10353. Note:    the HP 95LX apparently suspends regardless of the value in AL; on
  10354.       power-up, execution will resume following the instruction calling
  10355.       this function
  10356. SeeAlso: AH=44h
  10357. ----------154280-----------------------------
  10358. INT 15 - Compaq SLT/286 - ENTER STANDBY
  10359.     AX = 4280h
  10360. Return: AH = 42h
  10361.     CF clear if successful
  10362.     CF set if unable to enter standby
  10363. SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h
  10364. ----------1543-------------------------------
  10365. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  10366.     AH = 43h
  10367. Return: AL = status bits
  10368.         bit 0: LCD detached
  10369.         bit 1: reserved
  10370.         bit 2: RS232/parallel adapter powered on
  10371.         bit 3: internal modem powered on
  10372.         bit 4: power activated by alarm
  10373.         bit 5: standby power lost
  10374.         bit 6: external power in use
  10375.         bit 7: power low
  10376. ----------1544-------------------------------
  10377. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  10378.     AH = 44h
  10379.     AL = 00h to power off
  10380.          01h to power on
  10381. SeeAlso: AH=42h
  10382. ----------154600-----------------------------
  10383. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  10384.     AX = 4600h
  10385. Return: AH = modem configuration information
  10386.         bit 0 powerup state
  10387.             0 off
  10388.             1 on
  10389.         1 modem installed
  10390.         2 IRQ line assignment
  10391.             0 IRQ 4
  10392.             1 IRQ 3
  10393.         3 COM port assignment
  10394.             0 = COM 2
  10395.             1 = COM 1
  10396.         4 modem state
  10397.             0 not assigned
  10398.             1 assigned
  10399.         5 modem is on
  10400.     AL = power conservation status information
  10401.         bit 0  power source (0 internal, 1 external)
  10402.            1-2 low battery state
  10403.             00 no low battery condition
  10404.             01 low battery 1
  10405.             10 reserved
  10406.             11 low battery 2
  10407.            3-4 power conservation mode
  10408.             00 automatic
  10409.             01 on
  10410.             10 off
  10411.             11 reserved
  10412.     BH = default system inactivity timeout (1-21 minutes)
  10413.     BL = current system inactivity timeout (1-21 minutes)
  10414.     CH = default video display inactivity timeout (1-63 minutes)
  10415.     CL = current video display inactivity timeout (1-63 minutes)        
  10416.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  10417.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  10418. SeeAlso: AX=4280h,AX=4601h,INT 77
  10419. ----------154601-----------------------------
  10420. INT 15 - Compaq SLT/286 - Modify Power Conservation/Modem Configuration
  10421.     AX = 4601h
  10422.     BL = system inactivity timeout (1-21 minutes)
  10423.        = FFh do not change
  10424.     CL = video display inactivity timeout (1-63 minutes)        
  10425.        = FFh do not change
  10426.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  10427.        = FFh do not change
  10428.     DH = 00h turn modem OFF
  10429.        = 01h turn modem ON
  10430.        = FFh do not change modem state
  10431. Return: CF clear if successful
  10432.         AH = 00h
  10433.         BL = current system inactivity timeout (1-21 minutes)
  10434.         CL = current video display inactivity timeout (1-63 minutes)    
  10435.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  10436.         DH = FFh modem state unchanged
  10437.            = 00h modem turned OFF
  10438.            = 01h modem turned ON
  10439.     CF set on error
  10440.         AH = 01h input is out of range
  10441.            = 02h - No modem present
  10442. SeeAlso: AX=4600h,INT 77
  10443. ----------154900-----------------------------
  10444. INT 15 - Far East MSDOS - GET DOS TYPE
  10445.     AX = 4900h
  10446. Return: CF clear if successful
  10447.         AH = 00h
  10448.         BL = type of DOS running
  10449.         00h DOS/V
  10450.         01h DOS/J or DOS/K (early IBM Japan versions of MSDOS)
  10451.     CF set on error
  10452.         AH = 86h (function not supported)
  10453. Note:    in practice, DOS/J returns AH=86h; AX DOS does not support this call
  10454. SeeAlso: INT 21/AH=30h
  10455. ----------154DD4-----------------------------
  10456. INT 15 - HP 95LX - INSTALLATION CHECK
  10457.     AX = 4DD4h
  10458. Return: BX = 4850h ("HP") if HP 95LX
  10459.         CX = ??? (0101h)
  10460.         DL = ??? (00h)
  10461. SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
  10462. SeeAlso: INT 61"HP 95LX"
  10463. ----------154E-------------------------------
  10464. INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
  10465.     AH = 4Eh
  10466.     AL = light sleep
  10467.         00h disabled
  10468.         01h enabled
  10469. Note:    when light sleep is disabled, the system will continue running at full
  10470.       speed; when enabled, it may automatically slow to conserve batteries
  10471. SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
  10472. ----------154F-------------------------------
  10473. INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  10474.     AH = 4Fh
  10475.     AL = hardware scan code
  10476.     CF set
  10477. Return: CF set
  10478.        AL = hardware scan code
  10479.     CF clear
  10480.        scan code should be ignored
  10481. Note:    called by INT 9 handler to translate scan codes; the INT 09 code does
  10482.       not examine the scan code it reads from the keyboard until after
  10483.       this function returns.  This permits software to rearrange the
  10484.       keyboard; for example, swapping the CapsLock and Control keys, or
  10485.       turning the right Shift key into Enter.
  10486. SeeAlso: INT 09,INT 15/AH=C0h
  10487. ----------1550-------------------------------
  10488. INT 15 - VMIX v2.???+ - "sys_vm_page" - SET NEW VIRTUAL PAGE TABLE
  10489.     AH = 50h
  10490.     BX = segment of page directory table
  10491.     CX = page number of page table
  10492. SeeAlso: AH=10h"VMiX",AH=51h"VMiX",AH=52h"VMiX"
  10493. ----------1551-------------------------------
  10494. INT 15 - VMiX v2.???+ - "sys_vm_func" - EXECUTE FUNCTION IN PROTECTED MODE
  10495.     AH = 51h
  10496.     STACK:    DWORD    selector:offset of function
  10497. Return: registers as returned by function
  10498. Note:    executes function with privilege level 0 (highest privilege)
  10499. SeeAlso: AH=10h"VMiX",AH=52h"VMiX"
  10500. ----------1552-------------------------------
  10501. INT 15 - VMiX v2.???+ - "sys_vm_init" - INITIALIZE PROTECTED-MODE ENVIRONMENT
  10502.     AH = 52h
  10503. SeeAlso: AH=50h"VMiX",AH=51h"VMiX"
  10504. ----------155300BX0000-----------------------
  10505. INT 15 - Advanced Power Management Specification - INSTALLATION CHECK
  10506.     AX = 5300h
  10507.     BX = 0000h (device ID of system BIOS)
  10508. Return: CF clear if successful
  10509.         AH = major version (BCD)
  10510.         AL = minor version (BCD)
  10511.         BX = 504Dh ("PM")
  10512.         CX = flags
  10513.         bit 0: 16-bit protected mode interface supported
  10514.         bit 1: 32-bit protected mode interface supported
  10515.         bit 2: CPU idle call reduces processor speed
  10516.         bit 3: BIOS power management disabled
  10517.         bits 4-7 reserved
  10518.     CF set on error
  10519.         AH = error code (86h) (see below)
  10520.  
  10521. Values for error code:
  10522.  01h    power management functionality disabled
  10523.  02h    interface connection already in effect
  10524.  03h    interface not connected
  10525.  04h    real-mode interface not connected
  10526.  05h    16-bit protected-mode interface already connected
  10527.  06h    16-bit protected-mode interface not supported
  10528.  07h    32-bit protected-mode interface already connected
  10529.  08h    32-bit protected-mode interface not supported
  10530.  09h    unrecognized device ID
  10531.  0Ah    invalid parameter value in CX
  10532.  0Bh-1Fh reserved for other interface and general errors
  10533.  20h-3Fh reserved for CPU errors
  10534.  40h-5Fh reserved for device errors
  10535.  60h    can't enter requested state
  10536.  61h-7Fh reserved for other system errors
  10537.  80h    no power management events pending
  10538.  81h-85h reserved for other power management event errors
  10539.  86h    APM not present
  10540.  87h-9Fh reserved for other power management event errors
  10541. ----------155301BX0000-----------------------
  10542. INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE
  10543.     AX = 5301h
  10544.     BX = 0000h (device ID of system BIOS)
  10545. Return: CF clear if successful
  10546.     CF set on error
  10547.         AH = error code (02h,09h) (see AX=5300h)
  10548. SeeAlso: AX=5302h,AX=5303h,AX=5304h
  10549. ----------155302BX0000-----------------------
  10550. INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE
  10551.     AX = 5302h
  10552.     BX = 0000h (device ID of system BIOS)
  10553. Return: CF clear if successful
  10554.         AX = real-mode segment base address of protected-mode 16-bit code
  10555.         segment
  10556.         BX = offset of entry point
  10557.         CX = real-mode segment base address of protected-mode 16-bit data
  10558.         segment
  10559.     CF set on error
  10560.         AH = error code (05h,06h,09h) (see AX=5300h)
  10561. Notes:    the caller must initialize two consecutive descriptors with the
  10562.       returned segment base addresses; these descriptors must be valid
  10563.       whenever the protected-mode interface is called, and will have
  10564.       their limits arbitrarily set to 64K.
  10565.     the protected mode interface is invoked by making a far call with the
  10566.       same register values as for INT 15; it must be invoked while CPL=0,
  10567.       the code segment descriptor must have a DPL of 0, the stack must be
  10568.       in a 16-bit segment and have enough room for BIOS use and possible
  10569.       interrupts, and the current I/O permission bit map must allow access
  10570.       to the I/O ports used for power management.
  10571.     functions 00h-03h are not available from protected mode
  10572. SeeAlso: AX=5301h,AX=5303h,AX=5304h
  10573. ----------155303BX0000-----------------------
  10574. INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE
  10575.     AX = 5303h
  10576.     BX = 0000h (device ID of system BIOS)
  10577. Return: CF clear if successful
  10578.         AX = real-mode segment base address of protected-mode 32-bit code
  10579.         segment
  10580.         EBX = offset of entry point
  10581.         CX = real-mode segment base address of protected-mode 16-bit code
  10582.         segment
  10583.         DX = real-mode segment base address of protected-mode 16-bit data
  10584.         segment
  10585.     CF set on error
  10586.         AH = error code (07h,08h,09h) (see AX=5300h)
  10587. Notes:    the caller must initialize three consecutive descriptors with the
  10588.       returned segment base addresses for 32-bit code, 16-bit code, and
  10589.       16-bit data, respectively; these descriptors must be valid whenever
  10590.       the protected-mode interface is called, and will have their limits
  10591.       arbitrarily set to 64K.
  10592.     the protected mode interface is invoked by making a far call to the
  10593.       32-bit code segment with the same register values as for INT 15; it
  10594.       must be invoked while CPL=0, the code segment descriptor must have a
  10595.       DPL of 0, the stack must be in a 32-bit segment and have enough room
  10596.       for BIOS use and possible interrupts, and the current I/O permission
  10597.       bit map must allow access to the I/O ports used for power management.
  10598.     functions 00h-03h are not available from protected mode
  10599. SeeAlso: AX=5301h,AX=5302h,AX=5304h
  10600. ----------155304BX0000-----------------------
  10601. INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE
  10602.     AX = 5304h
  10603.     BX = 0000h (device ID of system BIOS)
  10604. Return: CF clear if successful
  10605.     CF set on error
  10606.         AH = error code (03h,09h) (see AX=5300h)
  10607. SeeAlso: AX=5301h,AX=5302h,AX=5303h
  10608. ----------155305-----------------------------
  10609. INT 15 - Advanced Power Management Specification - CPU IDLE
  10610.     AX = 5305h
  10611. Return: after system leaves idle state
  10612.     CF clear
  10613. Notes:    call when the system is idle and should be suspended until the next
  10614.       system event or interrupt
  10615.     should not be called from within a hardware interrupt handler to avoid
  10616.       reentrance problems
  10617.     if an interrupt causes the system to resume normal processing, the
  10618.       interrupt may or may not have been handled when the BIOS returns
  10619.       from this call; thus, the caller should allow interrupts on return
  10620.     interrupt handlers may not retain control if the BIOS allows
  10621.       interrupts while in idle mode even if they are able to determine
  10622.       that they were called from idle mode
  10623.     the caller should issue this call continuously in a loop until it needs
  10624.       to perform some processing of its own
  10625. SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
  10626. ----------155306-----------------------------
  10627. INT 15 - Advanced Power Management Specification - CPU BUSY
  10628.     AX = 5306h
  10629. Return: CF clear
  10630. Notes:    called to ensure that the system runs at full speed even on systems
  10631.       where the BIOS is unable to recognize increased activity (especially
  10632.       if interrupts are hooked by other programs and not chained to the
  10633.       BIOS)
  10634.     this call may be made even when the system is already running at full
  10635.       speed, but it will create unnecessary overhead
  10636.     should not be called from within a hardware interrupt handler to avoid
  10637.       reentrance problems
  10638. SeeAlso: AX=5305h
  10639. ----------155307-----------------------------
  10640. INT 15 - Advanced Power Management Specification - SET POWER STATE
  10641.     AX = 5307h
  10642.     BX = device ID (see below)
  10643.     CX = system state ID
  10644.         0000h ready (not supported for device ID 0001h)
  10645.         0001h stand-by
  10646.         0002h suspend
  10647.         0003h off (not supported for device ID 0001h)
  10648.         0004h-FFFFh reserved
  10649. Return: CF clear if successful
  10650.     CF set on error
  10651.         AH = error code (01h,09h,0Ah,60h) (see AX=5300h)
  10652. Note:    should not be called from within a hardware interrupt handler to avoid
  10653.       reentrance problems
  10654.  
  10655. Values for device IDs:
  10656.  0000h    system BIOS
  10657.  0001h    all devices for which the system BIOS manages power
  10658.  01xxh    display (01FFh for all attached display devices)
  10659.  02xxh    secondary storage (02FFh for all attached secondary storage devices)
  10660.  03xxh    parallel ports (03FFh for all attached parallel ports)
  10661.  04xxh    serial ports (04FFh for all attached serial ports)
  10662.  0500h-FFFFh reserved
  10663. ----------155307BX0001-----------------------
  10664. INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY
  10665.     AX = 5307h
  10666.     BX = 0001h
  10667.     CX = 0001h
  10668. Return: CF clear
  10669. Notes:    puts the entire system into stand-by mode; normally called in response
  10670.       to a System Stand-by Request notification after any necessary
  10671.       processing, but may also be invoked at the caller's discretion
  10672.     should not be called from within a hardware interrupt handler to avoid
  10673.       reentrance problems
  10674.     the stand-by state is typically exited on an interrupt
  10675. SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh
  10676. ----------155307BX0001-----------------------
  10677. INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM
  10678.     AX = 5307h
  10679.     BX = 0001h
  10680.     CX = 0002h
  10681. Return: after system is resumed
  10682.     CF clear
  10683. Notes:    puts the entire system into a low-power suspended state; normally
  10684.       called in response to a Suspend System Request notification after
  10685.       any necessary processing, but may also be invoked at the caller's
  10686.       discretion
  10687.     should not be called from within a hardware interrupt handler to avoid
  10688.       reentrance problems
  10689.     the caller may need to update its date and time values because the
  10690.       system could have been suspended for a long period of time
  10691. SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh
  10692. ----------155308BXFFFF-----------------------
  10693. INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT
  10694.     AX = 5308h
  10695.     BX = FFFFh
  10696.     CX = new state
  10697.         0000h disabled
  10698.         0001h enabled
  10699. Return: CF clear if successful
  10700.     CF set on error
  10701.         AH = error code (01h,09h,0Ah) (see AX=5300h)
  10702. Notes:    when power management is disabled, the system BIOS will not
  10703.       automatically power down devices, enter stand-by or suspended mode,
  10704.       or perform any power-saving actions in response to AX=5305h calls
  10705.     should not be called from within a hardware interrupt handler to avoid
  10706.       reentrance problems
  10707. SeeAlso: AX=5309h
  10708. ----------155309BXFFFF-----------------------
  10709. INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS
  10710.     AX = 5309h
  10711.     BX = FFFFh
  10712. Return: CF clear if successful
  10713.     CF set on error
  10714.         AH = error code (09h) (see AX=5300h)
  10715. Note:    should not be called from within a hardware interrupt handler to avoid
  10716.       reentrance problems
  10717. SeeAlso: AX=5308h
  10718. ----------15530ABX0001-----------------------
  10719. INT 15 - Advanced Power Management Specification - GET POWER STATUS
  10720.     AX = 530Ah
  10721.     BX = 0001h
  10722. Return: CF clear if successful
  10723.         BH = AC line status
  10724.         00h off-line
  10725.         01h on-line
  10726.         FFh unknown
  10727.         other reserved
  10728.         BL = battery status
  10729.         00h high
  10730.         01h low
  10731.         02h critical
  10732.         03h charging
  10733.         FFh unknown
  10734.         other reserved
  10735.         CL = remaining battery life
  10736.         00h-64h (0-100) percentage of full charge
  10737.         FFh unknown
  10738.     CF set on error
  10739.         AH = error code (09h) (see AX=5300h)
  10740. Note:    should not be called from within a hardware interrupt handler to avoid
  10741.       reentrance problems
  10742. ----------15530B-----------------------------
  10743. INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT
  10744.     AX = 530Bh
  10745. Return: CF clear if successful
  10746.         BX = event code
  10747.         0001h system stand-by request
  10748.         0002h system suspend request
  10749.         0003h normal resume system notification
  10750.         0004h critical resume system notification
  10751.         0005h battery low notification
  10752.     CF set on error
  10753.         AH = error code (03h,80h) (see AX=5300h)
  10754. Notes:    although power management events are often asynchronous, notification
  10755.       will not be made until polled via this call to permit software to
  10756.       only receive event notification when it is prepared to process
  10757.       power management events; since these events are not very time-
  10758.       critical, it should be sufficient to poll once or twice per second
  10759.     the critical resume notification is made after the system resumes
  10760.       from an emergency suspension; normally, the system BIOS only notifies
  10761.       its partner that it wishes to suspend and relies on the partner to
  10762.       actually request the suspension, but no notification is made on an
  10763.       emergency suspension
  10764.     should not be called from within a hardware interrupt handler to avoid
  10765.       reentrance problems
  10766. SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h
  10767. ----------155400-----------------------------
  10768. INT 15 C - Omniview Multitasker - INSTALLATION NOTIFICATION
  10769.     AX = 5400h
  10770.     ES:BX -> device information tables
  10771.     DI:DX -> dispatcher entry point
  10772. Note:    called by OmniView to notify programs loaded before OmniView of state
  10773.       changes inside OmniView
  10774. SeeAlso: AX=5407h,INT 2F/AX=DE00h
  10775. ----------155401-----------------------------
  10776. INT 15 C - Omniview Multitasker - PROCESS CREATION
  10777.     AX = 5401h
  10778.     ES:BX = process handle
  10779. Note:    called by OmniView to notify programs loaded before OmniView of state
  10780.       changes inside OmniView
  10781. SeeAlso: AX=5402h,INT 2F/AX=DE04h
  10782. ----------155402-----------------------------
  10783. INT 15 C - Omniview Multitasker - PROCESS DESTRUCTION
  10784.     AX = 5402h
  10785.     ES:DX = process handle
  10786. Note:    called by OmniView to notify programs loaded before OmniView of state
  10787.       changes inside OmniView
  10788. SeeAlso: AX=5401h,INT 2F/AX=DE05h
  10789. ----------155403-----------------------------
  10790. INT 15 C - Omniview Multitasker - SAVE
  10791.     AX = 5403h
  10792.     ES:DX = process swapping out
  10793. Note:    called by OmniView to notify programs loaded before OmniView of state
  10794.       changes inside OmniView
  10795. SeeAlso: AX=5404h,INT 2F/AX=DE08h
  10796. ----------155404-----------------------------
  10797. INT 15 C - Omniview Multitasker - RESTORE
  10798.     AX = 5404h
  10799.     ES:DX = process swapping in
  10800. Note:    called by OmniView to notify programs loaded before OmniView of state
  10801.       changes inside OmniView
  10802. SeeAlso: AX=5403h,INT 2F/AX=DE09h
  10803. ----------155405-----------------------------
  10804. INT 15 C - Omniview Multitasker - SWITCHING TO BACKGROUND
  10805.     AX = 5405h
  10806.     ES:DX = process swapping in
  10807. Note:    called by OmniView to notify programs loaded before OmniView of state
  10808.       changes inside OmniView
  10809. SeeAlso: AX=5406h
  10810. ----------155406-----------------------------
  10811. INT 15 C - Omniview Multitasker - SWITCHING TO FOREGROUND
  10812.     AX = 5406h
  10813.     ES:DX = process swapping in
  10814. Note:    called by OmniView to notify programs loaded before OmniView of state
  10815.       changes inside OmniView
  10816. SeeAlso: AX=5405h
  10817. ----------155407-----------------------------
  10818. INT 15 C - Omniview Multitasker - EXIT NOTIFICATION
  10819.     AX = 5407h
  10820. Note:    called by OmniView to notify programs loaded before OmniView of state
  10821.       changes inside OmniView
  10822. SeeAlso: AX=5400h,INT 2F/AX=DE03h
  10823. ----------1580-------------------------------
  10824. INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  10825.     AH = 80h
  10826.     BX = device ID
  10827.     CX = process ID
  10828.     CF clear
  10829. Return: CF clear if successful
  10830.         AH = 00h
  10831.     CF set on error
  10832.         AH = status
  10833.         80h invalid command (PC,PCjr)
  10834.         86h function not supported (XT)
  10835. Note:    this function should be hooked by a multitasker which wishes to keep
  10836.       track of device ownership; the default BIOS handler merely returns
  10837.       successfully
  10838. SeeAlso: AH=81h,AH=82h
  10839. ----------1581-------------------------------
  10840. INT 15 C - OS HOOK - DEVICE CLOSE
  10841.     AH = 81h
  10842.     BX = device ID
  10843.     CX = process ID
  10844.     CF clear
  10845. Return: CF clear if successful
  10846.         AH = 00h
  10847.     CF set on error
  10848.         AH = status (see AH=80h)
  10849. Note:    this function should be hooked by a multitasker which wishes to keep
  10850.       track of device ownership; the default BIOS handler merely returns
  10851.       successfully
  10852. SeeAlso: AH=80h,AH=82h
  10853. ----------1582-------------------------------
  10854. INT 15 C - OS HOOK - PROGRAM TERMINATION
  10855.     AH = 82h
  10856.     BX = process ID
  10857.     CF clear
  10858. Return: CF clear if successful
  10859.         AH = 00h
  10860.     CF set on error
  10861.         AH = status (see AH=80h)
  10862. Notes:    closes all devices opened by the given process ID with function 80h
  10863.     this function should be hooked by a multitasker which wishes to keep
  10864.       track of device ownership; the default BIOS handler merely returns
  10865.       successfully
  10866. SeeAlso: AH=80h,AH=81h
  10867. ----------1583-------------------------------
  10868. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  10869.     AH = 83h
  10870.     AL = subfunction
  10871.         00h set interval
  10872.         CX:DX = microseconds to delay
  10873.         ES:BX -> byte whose high bit is to be set at end of interval
  10874.         01h cancel wait interval
  10875. Return: CF set on error or function already busy
  10876.         AH = status
  10877.         80h invalid command (PC,PCjr)
  10878.         86h function not supported (XT and later)
  10879.     CF clear if successful
  10880. Note:    the resolution of the wait period is 977 microseconds on most systems
  10881.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  10882.       real-time clock chip which is available on INT 70
  10883. SeeAlso: AH=86h,INT 70
  10884. ----------1584-------------------------------
  10885. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  10886.     AH = 84h
  10887.     DX = subfunction
  10888.         0000h read joystick switches
  10889.         Return: AL bits 7-4 = switch settings
  10890.         0001h read positions of joysticks
  10891.         Return: AX = X position of joystick A
  10892.             BX = Y position of joystick A
  10893.             CX = X position of joystick B
  10894.             DX = Y position of joystick B
  10895. Return: CF set on error
  10896.         AH = status
  10897.         80h invalid command (PC,PCjr)
  10898.         86h function not supported (other)
  10899.     CF clear if successful
  10900. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  10901.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  10902.     a 250kOhm joystick typically returns 0000h-01A0h
  10903. ----------1585-------------------------------
  10904. INT 15 C - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
  10905.     AH = 85h
  10906.     AL = 00h SysRq key pressed
  10907.        = 01h SysRq key released
  10908.     CF clear
  10909. Return: CF clear if successful
  10910.         AH = 00h
  10911.     CF set on error
  10912.         AH = status (see AH=84h)
  10913. Notes:    called by keyboard decode routine
  10914.     the default handler simply returns successfully; programs which wish
  10915.       to monitor the SysRq key must hook this call
  10916. SeeAlso: INT 09
  10917. ----------1586-------------------------------
  10918. INT 15 - BIOS - WAIT (AT,PS)
  10919.     AH = 86h
  10920.     CX:DX = interval in microseconds
  10921. Return: CF clear if successful (wait interval elapsed)
  10922.     CF set on error or AH=83h wait already in progress
  10923.         AH = status (see AH=84h)
  10924. Note:    the resolution of the wait period is 977 microseconds on most systems
  10925.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  10926.       real-time clock chip which is available on INT 70
  10927. SeeAlso: AH=83h,INT 70
  10928. ----------1587-------------------------------
  10929. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  10930.     AH = 87h
  10931.     CX = number of words to copy (max 8000h)
  10932.     ES:SI -> global descriptor table
  10933. Return: CF set on error
  10934.     CF clear if successful
  10935.     AH = status
  10936.         00h source copied into destination
  10937.         01h parity error
  10938.         02h interrupt error
  10939.         03h address line 20 gating failed
  10940.         80h invalid command (PC,PCjr)
  10941.         86h unsupported function (XT,PS30)
  10942. Notes:    copy is done in protected mode with interrupts disabled
  10943.     this function is incompatible with the OS/2 compatibility box
  10944. SeeAlso: AH=88h,AH=89h
  10945.  
  10946. Format of global descriptor table:
  10947. Offset    Size    Description
  10948.  00h 16 BYTEs    zeros
  10949.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  10950.  12h  3 BYTEs    24-bit linear source address, low byte first
  10951.  15h    BYTE    source segment access rights (93h)
  10952.  16h    WORD    zero
  10953.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  10954.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  10955.  1Dh    BYTE    destination segment access rights (93h)
  10956.  1Eh 18 BYTEs    zeros
  10957. ----------1588-------------------------------
  10958. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  10959.     AH = 88h
  10960. Return: CF clear if successful
  10961.         AX = number of contiguous KB starting at absolute address 100000h
  10962.     CF set on error
  10963.         AH = status
  10964.         80h invalid command (PC,PCjr)
  10965.         86h unsupported function (XT,PS30)
  10966. Note:    TSRs which wish to allocate extended memory to themselves often hook
  10967.       this call, and return a reduced memory size.    They are then free to
  10968.       use the memory between the new and old sizes at will.
  10969. SeeAlso: AH=87h
  10970. ----------1589-------------------------------
  10971. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  10972.     AH = 89h
  10973.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  10974.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  10975.     ES:SI -> GDT for protected mode
  10976.            offset 0h  null descriptor (initialize to zeros)
  10977.               8h  GDT descriptor
  10978.              10h  IDT descriptor
  10979.              18h  DS
  10980.              20h  ES
  10981.              28h  SS
  10982.              30h  CS
  10983.              38h  uninitialized, used to build descriptor for BIOS CS
  10984.     CX = offset into protected-mode CS to jump to
  10985. Return: CF set on error
  10986.        AH = FFh  error enabling address line 20
  10987.     CF clear if successful
  10988.        AH = 00h
  10989.        in protected mode at specified address
  10990. Note:    BL and BH must be multiples of 8
  10991. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  10992. ----------1590-------------------------------
  10993. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  10994.     AH = 90h
  10995.     AL = device type
  10996.         00h disk
  10997.         01h diskette
  10998.         02h keyboard
  10999.         03h PS/2 pointing device
  11000.         21h waiting for keyboard input (Phoenix BIOS)
  11001.         80h network
  11002.         FBh digital sound (Tandy)
  11003.         FCh disk reset (PS)
  11004.         FDh diskette motor start
  11005.         FEh printer
  11006.     ES:BX -> request block for type codes 80h through BFh
  11007.     CF clear
  11008. Return: CF set if wait time satisfied
  11009.     CF clear if driver must perform wait
  11010.         AH = 00h
  11011. Notes:    type codes are allocated as follows:
  11012.       00-7F non-reentrant devices; OS must arbitrate access
  11013.       80-BF reentrant devices; ES:BX points to a unique control block
  11014.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  11015.     floppy and hard disk BIOS code uses this call to implement a timeout;
  11016.       for device types 00h and 01h, a return of CF set means that the
  11017.       timeout expired before the disk responded.
  11018.     this function should be hooked by a multitasker to allow other tasks
  11019.       to execute while the BIOS is waiting for I/O completion; the default
  11020.       handler merely returns with AH=00h and CF clear
  11021. SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
  11022. ----------1591-------------------------------
  11023. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  11024.     AH = 91h
  11025.     AL = device type (see AH=90h)
  11026.     ES:BX -> request block for type codes 80h through BFh
  11027.     CF clear
  11028. Return: AH = 00h
  11029. Note:    this function should be hooked by a multitasker to allow other tasks
  11030.       to execute while the BIOS is waiting for I/O completion; the default
  11031.       handler merely returns with AH=00h and CF clear
  11032. SeeAlso: AH=90h
  11033. ----------15BC-------------------------------
  11034. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED
  11035.     AH = BCh
  11036. Return: CF clear
  11037.     BYTE 0040h:00B0h set to ??? (43 on my 386/33)
  11038. Note:    reads system timer channel 0 twice, then does calculations on returned
  11039.       values
  11040. ----------15BF00-----------------------------
  11041. INT 15 - Rational Systems DOS/16M - ???
  11042.     AX = BF00h
  11043.     ???
  11044. Return: ???
  11045. Note:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  11046. SeeAlso: AX=BF02h
  11047. ----------15BF01-----------------------------
  11048. INT 15 - Rational Systems DOS/16M - ???
  11049.     AX = BF01h
  11050.     ???
  11051. Return: ???
  11052. Notes:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  11053.     called by DOS/4GW
  11054. SeeAlso: AX=BF00h,AX=BF02h
  11055. ----------15BF02DX0000-----------------------
  11056. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  11057.     AX = BF02h
  11058.     DX = 0000h
  11059. Return: DX = nonzero if installed
  11060.         DX:SI -> XBRK structure (see below)
  11061. Note:    this function is also supported by DOS/4G
  11062. SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
  11063. SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  11064.  
  11065. Format of XBRK structure:
  11066. Offset    Size    Description
  11067.  00h    DWORD    linear address of first available byte
  11068.  04h    DWORD    linear address of last available byte + 1 ???
  11069.  08h    DWORD    real-mode address of XBRK structure???
  11070.  0Ch    DWORD    ???
  11071.  10h  2 BYTEs    ???
  11072.  12h    WORD    segment of ???
  11073.  14h  8 BYTEs    ???
  11074.  1Ch 512 BYTEs    protected-mode IDT
  11075. 21Ch  N BYTEs    protected-mode GDT
  11076. ----------15BF03-----------------------------
  11077. INT 15 - Rational Systems DOS/4GW - UNINSTALL???
  11078.     AX = BF03h
  11079.     BX = PSP segment of extender
  11080.     ???
  11081. Return: ???
  11082. Note:    if BX is not the PSP segment of the extender, it passes the call down
  11083.       the INT 15 chain; this allows nested instances of the extender
  11084. SeeAlso: AX=BF06h
  11085. ----------15BF04-----------------------------
  11086. INT 15 - Rational Systems DOS/4GW - ???
  11087.     AX = BF04h
  11088.     BX = PSP segment of extender
  11089. Return: nothing???
  11090. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  11091.       the INT 15 chain; this allows nested instances of the extender
  11092.     grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
  11093. SeeAlso: INT 2F/AX=1607h/BX=22C0h
  11094. ----------15BF05-----------------------------
  11095. INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
  11096.     AX = BF05h
  11097.     BX = PSP segment of extender
  11098. Return: nothing???
  11099. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  11100.       the INT 15 chain; this allows nested instances of the extender
  11101.     calls INT 67/AX=DE01h if ???
  11102. ----------15BF06-----------------------------
  11103. INT 15 - Rational Systems DOS/4GW - ???
  11104.     AX = BF06h
  11105.     BX = PSP segment of extender
  11106.     ???
  11107. Return: ???
  11108. Note:    if BX is not the PSP segment of the extender, it passes the call down
  11109.       the INT 15 chain; this allows nested instances of the extender
  11110. SeeAlso: AX=BF03h
  11111. ----------15BFDCDX0000-----------------------
  11112. INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
  11113.     AX = BFDCh
  11114.     DX = 0000h
  11115.     SI = 0000h
  11116. Return: DX = nonzero if installed
  11117.         DX:SI -> XBRK structure (see AX=BF02h)
  11118. SeeAlso: AX=BF02h
  11119. ----------15BFDEBX0000-----------------------
  11120. INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
  11121.     AX = BFDEh
  11122.     BX = 0000h
  11123. Return: AX = ??? (0003h)
  11124.     BX = FFFFh
  11125. SeeAlso: AX=BF02h
  11126. ----------15BFDEBX0001-----------------------
  11127. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
  11128.     AX = BFDEh
  11129.     BX = 0001h
  11130. Return: BX = 0000h (success)
  11131.     CX:DX -> name of process manager executable
  11132. SeeAlso: AX=BFDEh/BX=0000h
  11133. ----------15BFDEBX0002-----------------------
  11134. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
  11135.     AX = BFDEh
  11136.     BX = 0002h
  11137.     CX:DX -> ???
  11138. Return: BX = 0000h (success)
  11139. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
  11140. ----------15BFDEBX0003-----------------------
  11141. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11142.     AX = BFDEh
  11143.     BX = 0003h
  11144. Return: BX = 0000h (success)
  11145.     CX:DX -> ???
  11146. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
  11147. ----------15BFDEBX0004-----------------------
  11148. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11149.     AX = BFDEh
  11150.     BX = 0004h
  11151.     CL = ???
  11152. Return: BX = 0000h (success)
  11153.     CX:DX -> XBRK structure (see AX=BF02h)
  11154. SeeAlso: AX=BFDEh/BX=0000h
  11155. ----------15BFDEBX0005-----------------------
  11156. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11157.     AX = BFDEh
  11158.     BX = 0005h
  11159.     CX = new value for ???
  11160. Return: BX = 0000h (success)
  11161.     AX = old value of ???
  11162.     DS:SI -> ??? (if AX nonzero on return)
  11163.     ES:DI -> ??? (if AX zero on return)
  11164. Note:    called by DOS4GW.EXE
  11165. SeeAlso: AX=BFDEh/BX=0000h
  11166. ----------15BFDEBX0006-----------------------
  11167. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11168.     AX = BFDEh
  11169.     BX = 0006h
  11170. Return: BX = 0000h (success)
  11171.     AH = interrupt number??? (BEh)
  11172.     CX:DX = ???
  11173. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
  11174. ----------15BFDEBX0007-----------------------
  11175. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
  11176.     AX = BFDEh
  11177.     BX = 0007h
  11178.     CX:DX = ???
  11179. Return: BX = 0000h (success)
  11180. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
  11181. ----------15BFDEBX0008-----------------------
  11182. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11183.     AX = BFDEh
  11184.     BX = 0008h
  11185.     CX = segment of ???
  11186.     DS = ???
  11187. Return: BX = status
  11188.         0000h successful
  11189.         AL = ??? (80h or C0h)
  11190.         DX = ??? (0603h) if AL=C0h
  11191.         0001h failed
  11192.         AX = 0000h
  11193. Note:    called by DOS4GW.EXE
  11194. SeeAlso: AX=BFDEh/BX=0000h
  11195. ----------15BFDEBX0009-----------------------
  11196. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
  11197.     AX = BFDEh
  11198.     BX = 0009h
  11199. Return: BX = 0000h (success)
  11200.     CX:DX -> full pathname to LOAD32.EXP
  11201. SeeAlso: AX=BFDEh/BX=0000h
  11202. ----------15BFDEBX000A-----------------------
  11203. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - DECREMENT ???
  11204.     AX = BFDEh
  11205.     BX = 000Ah
  11206. Return: BX = 0000h (success)
  11207.     AX = new value of ??? counter
  11208. Notes:    also resets a variety of values if the counter goes negative
  11209.     called by DOS4GW.EXE
  11210. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
  11211. ----------15BFDEBX000B-----------------------
  11212. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - INCREMENT ???
  11213.     AX = BFDEh
  11214.     BX = 000Bh
  11215. Return:    AX = new value of ??? counter
  11216. Note:    called by DOS4GW.EXE
  11217. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
  11218. ----------15BFDEBX000C-----------------------
  11219. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11220.     AX = BFDEh
  11221.     BX = 000Ch
  11222.     CL = ???
  11223.         00h
  11224.         nonzero
  11225. Return: ???
  11226. SeeAlso: AX=BFDEh/BX=0000h
  11227. ----------15BFDEBX000D-----------------------
  11228. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11229.     AX = BFDEh
  11230.     BX = 000Dh
  11231.     ???
  11232. Return: ???
  11233. SeeAlso: AX=BFDEh/BX=0000h
  11234. ----------15BFDEBX000E-----------------------
  11235. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11236.     AX = BFDEh
  11237.     BX = 000Eh
  11238.     DX:CX -> ???
  11239. Return: AX = segment of handle for calling task
  11240.     BX = ??? (probably destroyed)
  11241.     DX:CX -> ???
  11242. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
  11243. ----------15BFDEBX000F-----------------------
  11244. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - ???
  11245.     AX = BFDEh
  11246.     BX = 000Fh
  11247. Return: AX = segment of handle for calling task
  11248.     BX = ??? (probably destroyed)
  11249.     DX:CX -> ???
  11250. Note:    identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
  11251. SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
  11252. ----------15BFDEBX0010-----------------------
  11253. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET TASK HANDLE
  11254.     AX = BFDEh
  11255.     BX = 0010h
  11256. Return: AX = segment of caller's task handle
  11257.     BX destroyed
  11258. SeeAlso: AX=BFDEh/BX=000Fh
  11259. ----------15BFDEBX0011-----------------------
  11260. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11261.     AX = BFDEh
  11262.     BX = 0011h
  11263. Return: CX = code segment of DVDOS4GX.DVR
  11264.     BX = ??? (0004h)
  11265. SeeAlso: AX=BFDEh/BX=0000h
  11266. ----------15BFDEBX0012-----------------------
  11267. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11268.     AX = BFDEh
  11269.     BX = 0012h
  11270. Return: DX = code segment of DVDOS4GX.DVR
  11271.     BX = ??? (012Ch)
  11272.     CX = ??? (0006h)
  11273. SeeAlso: AX=BFDEh/BX=0000h
  11274. ----------15BFDEBX0013-----------------------
  11275. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11276.     AX = BFDEh
  11277.     BX = 0013h
  11278. Return: DX:CX -> ???
  11279. SeeAlso: AX=BFDEh/BX=000Eh
  11280. ----------15BFDEBX0014-----------------------
  11281. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - LOCK ??? MAILBOX
  11282.     AX = BFDEh
  11283.     BX = 0014h
  11284.     CX = index of ??? mailbox
  11285.         (0000h-0004h valid, but no range checking done)
  11286. Return: AX,BX destroyed
  11287. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  11288. ----------15BFDEBX0015-----------------------
  11289. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
  11290.     AX = BFDEh
  11291.     BX = 0015h
  11292.     CX = index of ??? mailbox
  11293.         (0000h-0004h valid, but no range checking done)
  11294. Return: AX,BX destroyed
  11295. SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
  11296. ----------15BFDEBX0016-----------------------
  11297. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
  11298.     AX = BFDEh
  11299.     BX = 0016h
  11300.     CX = index of ??? mailbox
  11301.         (0000h-0004h valid, but no range checking done)
  11302. Return: AX = status
  11303.         0000h no one owns mailbox
  11304.         0001h mailbox has an owner
  11305.     BX destroyed
  11306. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  11307. ----------15BFDEBX0017-----------------------
  11308. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
  11309.     AX = BFDEh
  11310.     BX = 0017h
  11311.     CX = index of ??? mailbox
  11312.         (0000h-0004h valid, but no range checking done)
  11313. Return: AX = segment of mailbox owner's handle
  11314.     BX = segment of caller's task handle
  11315. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
  11316. ----------15BFDEBXFFFD-----------------------
  11317. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - GET ???
  11318.     AX = BFDEh
  11319.     BX = FFFDh
  11320. Return: CX:DX = ???
  11321. SeeAlso: AX=BFDEh/BX=FFFEh
  11322. ----------15BFDEBXFFFE-----------------------
  11323. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - SET ???
  11324.     AX = BFDEh
  11325.     BX = FFFEh
  11326.     CX:DX = ???
  11327. SeeAlso: AX=BFDEh/BX=FFFDh
  11328. ----------15BFDEBXFFFF-----------------------
  11329. INT 15 - DESQview/X 1.02 - DVDOS4GX.DVR - NOP
  11330.     AX = BFDEh
  11331.     BX = FFFFh
  11332. SeeAlso: AX=BFDEh/BX=0000h
  11333. ----------15C0-------------------------------
  11334. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  11335.     AH = C0h
  11336. Return: CF set if BIOS doesn't support call
  11337.     CF clear on success
  11338.         ES:BX -> ROM table (see below)
  11339.     AH = status
  11340.         00h successful
  11341.         86h unsupported function
  11342. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  11343.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  11344.     Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  11345.       and a model byte at absolute address FE845h
  11346.     Tandy 1000 machines contain 21h in the byte at F000h:C000h
  11347.     some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  11348.       past the end of the configuration table
  11349.  
  11350. Format of ROM configuration table:
  11351. Offset    Size    Description
  11352.  00h    WORD    number of bytes following
  11353.  02h    BYTE    model (see below)
  11354.  03h    BYTE    submodel (see below)
  11355.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  11356.  05h    BYTE    feature byte 1:
  11357.         bit 7 = DMA channel 3 used by hard disk BIOS
  11358.         bit 6 = 2nd 8259 installed
  11359.         bit 5 = Real-Time Clock installed
  11360.         bit 4 = INT 15/AH=4Fh called upon INT 9h
  11361.         bit 3 = wait for external event supported
  11362.         bit 2 = extended BIOS area allocated (usually at top of RAM)
  11363.         bit 1 = bus is Micro Channel instead of ISA
  11364.         bit 0 reserved
  11365.  06h    BYTE    feature byte 2:
  11366.         bit 7 = ???
  11367.         bit 6 = INT 16/AH=09h (keyboard functionality) supported
  11368.         bits 5-0 = ???
  11369.  07h    BYTE    feature byte 3:
  11370.         reserved (0)
  11371.  08h    BYTE    feature byte 4:
  11372.         reserved (0)
  11373.  09h    BYTE    feature byte 5:
  11374.         reserved (0) (IBM)
  11375.         ??? (08h) (Phoenix 386 v1.10)
  11376. ---AWARD BIOS---
  11377.  0Ah  N BYTEs    AWARD copyright notice
  11378. ---Phoenix BIOS---
  11379.  0Ah    BYTE    ??? (00h)
  11380.  0Bh    BYTE    major version
  11381.  0Ch    BYTE    minor version (BCD)
  11382.  0Dh  4 BYTEs    ASCIZ string "PTL" (Phoenix Technologies Ltd)
  11383.  
  11384. Values for model/submodel/revision:
  11385. Model  Submdl  Rev    BIOS date    System
  11386.  FFh    *    *    04/24/81    PC (original)
  11387.  FFh    *    *    10/19/81    PC (some bugfixes)
  11388.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  11389.  FFh    46h    ***      ???        Olivetti M15
  11390.  FEh    *    *    08/16/82    PC XT
  11391.  FEh    *    *    11/08/82    PC XT and Portable
  11392.  FEh    43h    ***      ???        Olivetti M240
  11393.  FEh    A6h    ???      ???        ??? (checked for by 386MAX v6.01)
  11394.  FDh    *    *    06/01/83    PCjr
  11395.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  11396.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  11397.  FCh    00h    <> 01h      ???        7531/2 Industrial AT
  11398.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  11399.  FCh    01h    00h    09/17/87    Tandy 3000
  11400.  FCh    01h    00h    01/15&88    Toshiba T5200/100
  11401.  FCh    01h    00h    12/26*89    Toshiba T1200/XE
  11402.             (Those date characters are not typos)
  11403.  FCh    01h    30h      ???        Tandy 3000NL
  11404.  FCh    01h    ???      ???        Compaq 286/386
  11405.  FCh    02h    00h    04/21/86    PC XT-286
  11406.  FCh    04h    00h    02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
  11407.  FCh    04h    03h    04/18/88    PS/2 Model 50Z (10 MHz/0 ws 286)
  11408.  FCh    05h    00h    02/13/87     ** PS/2 Model 60 (10 MHz 286)
  11409.  FCh    06h    ???      ???        7552 "Gearbox"
  11410.  FCh    08h    ***      ???        Epson, unknown model
  11411.  FCh    09h    00h      ???        PS/2 Model 25 (10 MHz 286)
  11412.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  11413.  FCh    0Bh    00h    02/16/90    PS/1 Model 2011 (10 MHz 286)
  11414.  FCh    30h    ***      ???        Epson, unknown model
  11415.  FCh    31h    ***      ???        Epson, unknown model
  11416.  FCh    33h    ***      ???        Epson, unknown model
  11417.  FCh    42h    ***      ???        Olivetti M280
  11418.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  11419.  FCh    48h    ***      ???        Olivetti M290
  11420.  FCh    4Fh    ***      ???        Olivetti M250
  11421.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  11422.  FCh    51h    ***      ???        Olivetti PCS286
  11423.  FCh    52h    ***      ???        Olivetti M300
  11424.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  11425.  FBh    00h    01h    01/10/86    PC XT, Enh Keyb, 3.5" support
  11426.  FBh    00h    02h    05/09/86    PC XT
  11427.  FBh    4Ch    ***      ???        Olivetti M200
  11428.  FAh    00h    00h    09/02/86    PS/2 Model 30 (8 MHz 8086)
  11429.  FAh    00h    01h    12/12/86    PS/2 Model 30
  11430.  FAh    01h    00h      ???        PS/2 Model 25/25L (8 MHz 8086)
  11431.  FAh    4Eh    ***      ???        Olivetti M111
  11432.  F9h    00h    00h    09/13/85    PC Convertible
  11433.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 (16MHz 386)
  11434.  F8h    01h    00h    10/07/87    PS/2 Model 80 (20MHz 386)
  11435.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  11436.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  11437.  F8h    09h    00h      ???        PS/2 Model 70 16MHz, type 1 system brd
  11438.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  11439.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  11440.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  11441.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  11442.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX (16 MHz 386SX)
  11443.  F8h    0Dh    00h      ???        PS/2 Model 70 25MHz, type 3 system brd
  11444.  F8h    11h    00h    10/01/90    PS/2 Model 90 (25 MHz 486)
  11445.  F8h    13h    00h    10/01/90    PS/2 Model 90 (33 MHz 486)
  11446.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9 (25 MHz 486)
  11447.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD (33 MHz 486)
  11448.  F8h    19h    05h      ???        PS/2 Model 35/35LS or 40 (20 MHz 386SX)
  11449.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486 (25 MHz 486)
  11450.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121 (16 MHz 386SX)
  11451.  F8h    1Eh    00h    02/08/90    PS/2 Model 55LS (16 MHz 386SX)
  11452.  F8h    23h    01h      ???        PS/2 Model L40 (20 MHz 386SX)
  11453.  F8h    25h    06h      ???        PS/2 Model M57 (20 MHz 386SLC)
  11454.  F8h    26h    01h      ???        PS/2 Model 57 (20 MHz 386SX)
  11455.  F8h    2Ah    00h      ???        PS/2 Model 95 (50 MHz 486)
  11456.  F8h    2Bh    00h      ???        PS/2 Model 90 (50 MHz 486)
  11457.  F8h    2Ch    01h      ???        PS/2 Model 95 (20 MHz 486SX)
  11458.  F8h    2Dh    00h      ???        PS/2 Model 90 (20 MHz 486SX)
  11459.  F8h    2Eh    01h      ???        PS/2 Model 95 (20 MHz 486SX + 487SX)
  11460.  F8h    2Fh    00h      ???        PS/2 Model 90 (20 MHz 486SX + 487SX)
  11461.  F8h    30h    00h      ???        PS/1 Model 2121 (16 MHz 386SX)
  11462.  F8h    50h    00h      ???        PS/2 Model P70 (8573) (16 MHz 386)
  11463.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  11464.  F8h    52h    00h      ???        PS/2 Model P75 (33 MHz 486)
  11465.  F8h    61h    ***      ???        Olivetti P500
  11466.  F8h    62h    ***      ???        Olivetti P800
  11467.  F8h    80h    00h      ???        PS/2 Model 80 (25 MHz 386)
  11468.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21
  11469.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX)
  11470.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX)
  11471.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX + 487SX)
  11472.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX + 487SX)
  11473.  E1h    ???    ???      ???        ??? (checked for by DOS4GW.EXE)
  11474.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  11475.  30h    ???    ???      ???        Sperry PC
  11476.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  11477.  ???    56h    ???      ???        Olivetti, unknown model
  11478.  ???    74h    ???      ???        Olivetti, unknown model
  11479.     * This BIOS call is not implemented in these early versions.
  11480.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  11481.    ** These BIOS versions require the DASDDRVR.SYS patches.
  11482.   *** These Olivetti and Epson machines store the submodel in the byte at
  11483.     F000h:FFFDh.
  11484.  
  11485. Values for Dell model byte:
  11486.  02h    Dell 200
  11487.  03h    Dell 300
  11488.  05h    Dell 220
  11489.  06h    Dell 310
  11490.  07h    Dell 325
  11491.  09h    Dell 310A
  11492.  0Ah    Dell 316
  11493.  0Bh    Dell 220E
  11494.  0Ch    Dell 210
  11495.  0Dh    Dell 316SX
  11496.  0Eh    Dell 316LT
  11497.  0Fh    Dell 320LX
  11498.  11h    Dell 425E
  11499. ----------15C1-------------------------------
  11500. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  11501.     AH = C1h
  11502. Return: CF set on error
  11503.     CF clear if successful
  11504.         ES = segment of data area
  11505. SeeAlso: AH=04h"ABIOS"
  11506. ----------15C200BH00-------------------------
  11507. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  11508.     AX = C200h
  11509.     BH = 00h disable
  11510.          01h enable
  11511. Return: CF set on error
  11512.     AH = status
  11513.         00h successful
  11514.         01h invalid function
  11515.         02h invalid input
  11516.         03h interface error
  11517.         04h need to resend
  11518.         05h no device handler installed
  11519. ----------15C201-----------------------------
  11520. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  11521.     AX = C201h
  11522. Return: CF set on error
  11523.         AH = status (see AX=C200h)
  11524.     CF clear if successful
  11525.         BH = device ID
  11526. SeeAlso: INT 33/AX=0000h
  11527. ----------15C202-----------------------------
  11528. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  11529.     AX = C202h
  11530.     BH = sampling rate
  11531.         00h 10/second
  11532.         01h 20/second
  11533.         02h 40/second
  11534.         03h 60/second
  11535.         04h 80/second
  11536.         05h 100/second
  11537.         06h 200/second
  11538. Return: CF set on error
  11539.         AH = status (see AX=C200h)
  11540. SeeAlso: INT 33/AX=001Ch
  11541. ----------15C203-----------------------------
  11542. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  11543.     AX = C203h
  11544.     BH = resolution
  11545.         00h one count per mm
  11546.         01h two counts per mm
  11547.         02h four counts per mm
  11548.         03h eight counts per mm
  11549. Return: CF set on error
  11550.         AH = status (see AX=C200h)
  11551. ----------15C204-----------------------------
  11552. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  11553.     AX = C204h
  11554. Return: CF set on error
  11555.         AH = status (see AX=C200h)
  11556.     CF clear if successful
  11557.         BH = device ID
  11558. ----------15C205-----------------------------
  11559. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  11560.     AX = C205h
  11561.     BH = data package size (1 - 8 bytes)
  11562. Return: CF set on error
  11563.         AH = status (see AX=C200h)
  11564. SeeAlso: AX=C201h
  11565. ----------15C206-----------------------------
  11566. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET/SET SCALING FACTOR
  11567.     AX = C206h
  11568.     BH = subfunction
  11569.         00h return device status
  11570.         Return: BL = status
  11571.                bit 0: right button pressed
  11572.                bit 1: reserved
  11573.                bit 2: left button pressed
  11574.                bit 3: reserved
  11575.                bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling
  11576.                bit 5: device enabled
  11577.                bit 6: 0 if stream mode, 1 if remote mode
  11578.                bit 7: reserved
  11579.             CL = resolution (see AX=C203h)
  11580.             DL = sample rate, reports per second
  11581.         01h set scaling at 1:1
  11582.         02h set scaling at 2:1
  11583. Return: CF set on error
  11584.         AH = status (see AX=C200h)
  11585. ----------15C207-----------------------------
  11586. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  11587.     AX = C207h
  11588.     ES:BX -> FAR user device handler
  11589. Return: CF set on error
  11590.         AH = status (see AX=C200h)
  11591. SeeAlso: INT 33/AX=000Ch
  11592. ----------15C3------------------------------
  11593. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  11594.     AH = C3h
  11595.     AL = 00h disable
  11596.          01h enable
  11597.         BX = timer counter
  11598. Return: CF set on error
  11599.     CF clear if successful
  11600. Note:    the watchdog timer generates an NMI
  11601. ----------15C4-------------------------------
  11602. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  11603.     AH = C4h
  11604.     AL = 00h return base POS register address
  11605.          01h enable slot
  11606.          BL = slot number
  11607.          02h enable adapter
  11608. Return: CF set on error
  11609.     DX = base POS register address (if function 00h)
  11610. SeeAlso: AH=C6h
  11611. ----------15C5-------------------------------
  11612. INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  11613.     AH = C5h
  11614.     AL = interrupt being invoked
  11615.         01h INT 19
  11616.         02h INT 14
  11617.         03h INT 16
  11618.         04h INT 40 (floppy INT 13)
  11619.         05h INT 17
  11620.         06h INT 10
  11621.         07h INT 12
  11622.         08h INT 11
  11623.         09h INT 1A
  11624. Return: all registers except AX must be preserved
  11625. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  11626.       handlers on the PS/2 Models 30/286, 50Z, and 95
  11627.     default handler does nothing and returns CF clear for the above
  11628.       subfunctions, CF set and AH=86h for all other subfunctions
  11629.     value of AX passed to the original interrupt handler is pushed on
  11630.       stack immediately prior to call
  11631. ----------15C6-------------------------------
  11632. INT 15 U - later PS/2 models - GET POS DATA
  11633.     AH = C6h
  11634.     ???
  11635. Return: ???
  11636. Notes:    this function is referenced by name and number in some IBM BIOS manuals
  11637.     IBM reports that "there are a number of problems with this call" and
  11638.       does not recommend its use.
  11639. SeeAlso: AH=C4h
  11640. ----------15C7-------------------------------
  11641. INT 15 U - PS/2 Model 95 - ???
  11642.     AH = C7h
  11643.     ???
  11644. Return: ???
  11645. ----------15C8-------------------------------
  11646. INT 15 U - PS/2 Model 95 - ???
  11647.     AH = C8h
  11648.     ???
  11649. Return: ???
  11650. ----------15C9-------------------------------
  11651. INT 15 U - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
  11652.     AH = C9h
  11653.     AL = 10h (may be required on some non-PS BIOSes)
  11654. Return: AH = 00h
  11655.     CH = CPU type
  11656.         03h 80386DX or clone
  11657.         04h 80486
  11658.         23h 80386SX or clone
  11659.     CL = mask revision (stepping level)
  11660. Notes:    the BIOS must save DX at startup in order to be able to support this
  11661.       call; PS/2 Models 56, 57, 90, and 95 are known to support it
  11662.     the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
  11663. ----------15CA-------------------------------
  11664. INT 15 U - PS/2 Model 95 - ???
  11665.     AH = CAh
  11666.     ???
  11667. Return: ???
  11668. ----------15CB-------------------------------
  11669. INT 15 U - PS/2 Model 95 - ???
  11670.     AH = CBh
  11671.     ???
  11672. Return: ???
  11673. ----------15CC-------------------------------
  11674. INT 15 U - PS/2 Model 95 - ???
  11675.     AH = CCh
  11676.     ???
  11677. Return: ???
  11678. ----------15CD-------------------------------
  11679. INT 15 U - PS/2 Model 95 - ???
  11680.     AH = CDh
  11681.     ???
  11682. Return: ???
  11683. ----------15CE-------------------------------
  11684. INT 15 U - PS/2 Model 95 - ???
  11685.     AH = CEh
  11686.     ???
  11687. Return: ???
  11688. ----------15CF-------------------------------
  11689. INT 15 U - PS/2 Model 95 - ???
  11690.     AH = CFh
  11691.     ???
  11692. Return: ???
  11693. ----------15D800-----------------------------
  11694. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  11695.     AX = D800h
  11696.     CL = slot number (including embedded and virtual)
  11697. Return: CF clear if successful
  11698.         AH = 00h
  11699.     CF set on error
  11700.         AH = error code
  11701.         80h invalid slot number
  11702.         82h EISA CMOS corrupt
  11703.         83h empty slot
  11704.         86h invalid BIOS-FW function call
  11705.         87h invalid system configuration
  11706.     AL bit flags
  11707.         bit 7: set if duplicate IDs
  11708.         6: set if product ID readable
  11709.           4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
  11710.           0-3: duplicate ID number if bit 7 set
  11711.     BH = major revision level of configuration utility
  11712.     BL = minor revision level of configuration utility
  11713.     CX = checksum of configuration file
  11714.     DH = number of device functions
  11715.     DL = combined function information byte
  11716.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  11717. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  11718. SeeAlso: AX=D801h,AX=D804h
  11719. ----------15D801-----------------------------
  11720. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  11721.     AX = D801h
  11722.     CH = function number to read
  11723.     CL = slot number (including embedded and virtual)
  11724.     DS:SI -> 320-byte buffer for standard configuration data block
  11725. Return: CF clear if successful
  11726.         AH = 00h
  11727.         DS:SI buffer filled
  11728.     CF set on error
  11729.         AH = error code
  11730.         80h invalid slot number
  11731.         81h invalid function number
  11732.         82h EISA CMOS corrupt
  11733.         83h empty slot
  11734.         86h invalid BIOS-FW function call
  11735.         87h invalid system configuration
  11736.     BX destroyed
  11737. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  11738. ----------15D802-----------------------------
  11739. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  11740.     AX = D802h
  11741.     BH = EISA config utility major revision level
  11742.     BL = EISA config utility minor revision level
  11743. Return: CF clear if successful
  11744.         AH = 00h
  11745.     CF set on error
  11746.         AH = error code
  11747.         84h error clearing CMOS
  11748.         86h invalid BIOS-FW function call
  11749.         88h config utility version not supported
  11750. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  11751. SeeAlso: AX=D803h
  11752. ----------15D803-----------------------------
  11753. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  11754.     AX = D803h
  11755.     CX = length of data structure (0000h = empty slot)
  11756.         includes two bytes for config file checksum
  11757.     DS:SI -> configuration data
  11758. Return: CF clear if successful
  11759.         AH = 00h
  11760.     CF set on error
  11761.         AH = error code
  11762.         84h error clearing CMOS
  11763.         85h EISA CMOS is full
  11764.         86h invalid BIOS-FW function call
  11765. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  11766. SeeAlso: AX=D802h
  11767. ----------15D804-----------------------------
  11768. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  11769.     AX = D804h
  11770.     CL = slot number (including embedded and virtual)
  11771. Return: CF clear if successful
  11772.         AH = 00h
  11773.     CF set on error
  11774.         AH = error code
  11775.         80h invalid slot number
  11776.         83h empty slot
  11777.         86h invalid BIOS-FW function call
  11778.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  11779. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  11780. SeeAlso: AX=D800h
  11781. ----------15D8-------------------------------
  11782. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  11783.     AH = D8h
  11784.     AL = 80h to 84h
  11785.     other registers as appropriate for AL=00h to 04h
  11786. Return: as appropriate for AL=00h to 04h
  11787. Note:    these functions are identical to AX=D800h to D804h, except that they
  11788.       should be called when using 32-bit CS addressing mode (pointers use
  11789.       ESI rather than SI as offset) instead of 16-bit addressing mode
  11790. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  11791. ----------15DE00-----------------------------
  11792. INT 15 - DESQview - GET PROGRAM NAME
  11793.     AX = DE00h
  11794. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  11795.         the "Switch Windows" menu (see below)
  11796. Note:    always returns AX=0000h under DESQview/X
  11797. SeeAlso: AX=DE07h
  11798.  
  11799. Format of program entry in DESQVIEW.DVO:
  11800. Offset    Size    Description
  11801.  00h    BYTE    length of name (FFh if end of file)
  11802.  01h  N BYTEs    name
  11803.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  11804.     BYTE    program type
  11805.         00h normal program
  11806.         04h divider
  11807.         80h Delete a Program
  11808.         81h Change a Program
  11809.     WORD    ??? apparently always 0000h
  11810. ----------15DE01-----------------------------
  11811. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  11812.     AX = DE01h
  11813. Return: nothing
  11814. Notes:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  11815.     NOP for DESQview/X
  11816. ----------15DE02-----------------------------
  11817. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  11818.     AX = DE02h
  11819. Return: nothing
  11820. Note:    this call is a NOP in DV 2.x
  11821. SeeAlso: AX=DE03h
  11822. ----------15DE03-----------------------------
  11823. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  11824.     AX = DE03h
  11825. Return: AX = ??? for current window
  11826.     BX = ??? for current window
  11827. Note:    this call is a NOP in DV 2.x
  11828. SeeAlso: AX=DE02h
  11829. ----------15DE04-----------------------------
  11830. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  11831.     AX = DE04h
  11832. Return: BX = bytes of common memory available
  11833.     CX = largest block available
  11834.     DX = total common memory in bytes
  11835. SeeAlso: AX=DE05h,AX=DE06h
  11836. ----------15DE05-----------------------------
  11837. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  11838.     AX = DE05h
  11839. Return: BX = K of memory available
  11840.     CX = largest block available
  11841.     DX = total conventional memory in K
  11842. SeeAlso: AX=DE04h,AX=DE06h
  11843. ----------15DE06-----------------------------
  11844. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  11845.     AX = DE06h
  11846. Return: BX = K of expanded memory available
  11847.     CX = largest block available
  11848.     DX = total expanded memory in K
  11849. SeeAlso: AX=DE04h,AX=DE05h
  11850. ----------15DE07-----------------------------
  11851. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  11852.     AX = DE07h
  11853. Return: AX = number of program as it appears on the "Switch Windows" menu
  11854. Note:    this API call may be made from a hardware interrupt handler
  11855. SeeAlso: AX=DE00h
  11856. ----------15DE08-----------------------------
  11857. INT 15 - DESQview - GET ???
  11858.     AX = DE08h
  11859. Return: AX = 0000h if ??? is not set to the current task
  11860.          0001h if ??? is set to the current task
  11861. ----------15DE09-----------------------------
  11862. INT 15 - DESQview - UNIMPLEMENTED
  11863.     AX = DE09h
  11864. Return: nothing (NOP in DV 1.x and 2.x)
  11865. ----------15DE0A-----------------------------
  11866. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  11867.     AX = DE0Ah
  11868.     BL = character
  11869. Return: character displayed, next call will display in next position (which
  11870.     wraps back to the start of the line if off the right edge of screen)
  11871. Notes:    displays character on bottom line of *physical* screen, regardless
  11872.       of current size of window (even entirely hidden)
  11873.     does not know about graphics display modes, just pokes the characters
  11874.       into display memory
  11875.     this API call may be made from a hardware interrupt handler
  11876. SeeAlso: AX=1003h
  11877. ----------15DE0B-----------------------------
  11878. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  11879.     AX = DE0Bh
  11880.     BL = API level minor version number
  11881.     BH = API level major version number
  11882. Return: AX = maximum API level (AH = major, AL = minor)
  11883. Notes:    if the requested API level is greater than the version of DESQview, a
  11884.       "You need a newer version" error window is popped up
  11885.     the API level defaults to 1.00, and is inherited by child tasks
  11886. ----------15DE0C-----------------------------
  11887. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  11888.     AX = DE0Ch
  11889.     BX = number of bytes
  11890. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  11891. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  11892.       system memory
  11893. SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
  11894. ----------15DE0D-----------------------------
  11895. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  11896.     AX = DE0Dh
  11897.     ES:DI -> previously allocated block
  11898. Return: nothing
  11899. SeeAlso: AX=1002h,AX=DE0Ch
  11900. ----------15DE0E-----------------------------
  11901. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  11902.     AX = DE0Eh
  11903.     ES:DI -> name to find
  11904.     CX = length of name
  11905. Return: BX = 0000h not found
  11906.          0001h found
  11907.         DS:SI = object handle
  11908. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"
  11909.  
  11910. Special mailbox names:
  11911.  "COM1" ... "COM4"    RBcomm using COM1 ... COM4
  11912.  "DESQview/X Help Engine"
  11913.  "DESQview/X Network Server"  Network Manager
  11914.  "DESQview X Server0"    X-Windows server
  11915.  "DESQview X Server7"    X-Windows printing service
  11916.  "INBOX"        DESQview/X LPD requests
  11917.  "OUTBOX"        DESQview/X LPD responses
  11918.  "WAITBOX"        semaphore to synchronize DESQview/X LPD communications
  11919. ----------15DE0F-----------------------------
  11920. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  11921.     AX = DE0Fh
  11922. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  11923. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  11924.     enables an additional mouse mode
  11925. ----------15DE10-----------------------------
  11926. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  11927.     AX = DE10h
  11928.     BH = scan code
  11929.     BL = character
  11930. Return: nothing
  11931. Notes:    a later read will get the keystroke as if it had been typed by the user
  11932.     multiple pushes are read last-in first-out
  11933.     if a script exists for the pushed key in the current application, the
  11934.       script will be executed
  11935.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  11936. SeeAlso: INT 16/AH=05h
  11937. ----------15DE11BL00-------------------------
  11938. INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
  11939.     AX = DE11h
  11940.     BL = 00h      viewport will not move automatically
  11941.          nonzero  viewport will move to keep cursor visible (default)
  11942. Return: nothing
  11943. ----------15DE12BX0000-----------------------
  11944. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  11945.     AX = DE12h
  11946.     BX = 0000h    select normal style (linefeed only moves down)
  11947.          nonzero  select C style (linefeed moves to start of next line)
  11948. Return: nothing
  11949. Note:    set on a per-task basis, and inherited from the parent task
  11950. ----------15DE13-----------------------------
  11951. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  11952.     AX = DE13h
  11953. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  11954.          without matching ENDC (see INT 15/AX=101Ch)
  11955. Note:    this API call may be made from within a hardware interrupt handler
  11956. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  11957. ----------15DE14-----------------------------
  11958. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  11959.     AX = DE14h
  11960.     ES:DI -> object
  11961. Return: BL = 00h not an object
  11962.          08h window or task
  11963.          09h mailbox
  11964.          0Ah keyboard
  11965.          0Bh timer
  11966.          0Ch objectq
  11967.          0Fh pointer
  11968.          10h panel
  11969. SeeAlso: AX=1016h
  11970. ----------15DE15-----------------------------
  11971. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  11972.     AX = DE15h
  11973.     BL = error handling mode
  11974.         00h post system error on all error conditions
  11975.         01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  11976.         messages sent to mailboxes which fail due to lack of system
  11977.         or common memory
  11978.         02h (v2.26+) same as 01h, but also return null pointer for GETMEM
  11979.         calls which fail due to lack of system memory
  11980. Return: nothing
  11981. SeeAlso: AX=DE0Ch,AX=DE16h
  11982. ----------15DE16-----------------------------
  11983. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  11984.     AX = DE16h
  11985. Return: BL = current mode
  11986.         00h always post system error
  11987.         01h return carry flag set on failed mailbox writes
  11988.         02h return CF set on failed mailbox writes and NULL on failed
  11989.         GETMEM calls
  11990. SeeAlso: AX=DE15h
  11991. ----------15DE17-----------------------------
  11992. INT 15 - DESQview v2.20-2.25 - reserved
  11993.     AX = DE17h
  11994. Return: pops up "Programming error" window
  11995. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  11996. SeeAlso: AX=1117h
  11997. ----------15DE17-----------------------------
  11998. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  11999.     AX = DE17h
  12000.     BX = function
  12001.         0000h   get current mapping context without setting
  12002.         nonzero set new mapping context to BX
  12003. Return: BX = mapping context in effect before call
  12004. Notes:    mapping contexts determine conventional-memory addressability; setting
  12005.       a mapping context ensures that the associated program and data areas
  12006.       are in memory for access.  Usable by drivers, TSRs and shared
  12007.       programs.
  12008.     caller need not be running under DESQview
  12009.     this API call may be made from a hardware interrupt handler
  12010. SeeAlso: AX=1117h,AX=DE21h,INT 2F/AX=1685h
  12011. ----------15DE18-----------------------------
  12012. INT 15 - DESQview v2.20+ - internal - ???
  12013.     AX = DE18h
  12014.     BP = function number
  12015.         high byte must be 10h
  12016.         low byte is function
  12017.         00h set ???
  12018.             BL = ???  (00h-10h, video mode???)
  12019.             BH = value to store
  12020.         03h set ???
  12021.             BL = ??? (stored in driver)
  12022.         0Ah get ???
  12023.             ES:DI -> 18-byte buffer to hold ???
  12024. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  12025. ----------15DE19-----------------------------
  12026. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  12027.     AX = DE19h
  12028.     BX = number of bytes to allocate
  12029. Return: AX = 0000h successful
  12030.         ES:DI -> allocated block
  12031.          nonzero insufficient memory
  12032. Note:    this API call may be made from within a hardware interrupt handler
  12033. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  12034. ----------15DE1A-----------------------------
  12035. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  12036.     AX = DE1Ah
  12037.     DS:SI -> previously allocated block
  12038. Note:    this function may be called from within a hardware interrupt handler
  12039. SeeAlso: AX=DE0Dh,AX=DE19h
  12040. ----------15DE1B-----------------------------
  12041. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  12042.     AX = DE1Bh
  12043. Return: nothing
  12044. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  12045. ----------15DE1C-----------------------------
  12046. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  12047.     AX = DE1Ch
  12048. Return: nothing
  12049. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  12050.       that DOS is free
  12051.     the official documentation states that this call should be paired with
  12052.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  12053.     this API call may be made from within a hardware interrupt handler
  12054. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  12055. ----------15DE1D-----------------------------
  12056. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  12057.     AX = DE1Dh
  12058.     DX = segment of handle for task to receive keystroke
  12059.     BL = character
  12060.     BH = scan code
  12061. Return: AX = 0000h if successful
  12062.        nonzero if receiver's keyboard buffer was full
  12063. Notes:    the key is treated as though the user had pressed it, ignoring any
  12064.       script which may be bound to the key, and using the current field
  12065.       table if the keyboard object is in field processing mode
  12066.     multiple PUTKEYs are seen in the order in which they are executed
  12067. SeeAlso: AX=DE10h
  12068. ----------15DE1E-----------------------------
  12069. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  12070.     AX = DE1Eh
  12071. Return:    CL = actual number of rows on screen
  12072.     CH = actual number of columns on screen
  12073.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  12074. Note:    this API call may be made from a hardware interrupt handler
  12075. SeeAlso: INT 10/AH=0Fh
  12076. ----------15DE1F-----------------------------
  12077. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  12078.     AX = DE1Fh
  12079. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  12080. Note:    this API call may be made from within a hardware interrupt handler
  12081. SeeAlso: AX=DE13h,INT 21/AH=34h
  12082. ----------15DE20-----------------------------
  12083. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  12084.     AX = DE20h
  12085.     BX = segment of handle of task to interupt
  12086.     DX:CX -> FAR interrupt routine
  12087.     BP,SI,DI,DS,ES as required by interrupt routine
  12088. Return: nothing
  12089. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  12090.       making the DISPATCHINT call
  12091.     multiple "DISPATCHINT" calls are processed in the order in which they
  12092.       were executed
  12093.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  12094.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  12095.       needs to be preserved
  12096.     this API call may be made from within a hardware interrupt handler
  12097. SeeAlso: AX=1021h,AX=DE2Ah
  12098. ----------15DE21-----------------------------
  12099. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  12100.     AX = DE21h
  12101.     BX = new state
  12102.         0000h turn off
  12103.         nonzero turn on
  12104. Return: BX = old state of virtualization
  12105. Notes:    this API call may be made from within a hardware interrupt handler
  12106.     under DV 2.40 and 2.42, this call appears to have no effect and always
  12107.       returns a nonzero value in BX which appears to be the offset within
  12108.       the DV common memory segment of the caller's task object; it may
  12109.       only have an effect within a hardware interrupt handler
  12110. SeeAlso: AX=1117h,AX=DE17h
  12111. ----------15DE22-----------------------------
  12112. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  12113.     AX = DE22h
  12114.     DX = segment of task handle
  12115. Return: DX = total amount of memory in paragraphs
  12116.     BX = amount of system memory in paragraphs
  12117.     CX = largest block of system memory available in paragraphs
  12118.     AX = flags
  12119.         bit 0: system memory resides in shared memory
  12120.         1: process's memory is swapped out
  12121.         2: process's system memory is swapped out
  12122. Notes:    if the task handle is a child task, the returned values will be for the
  12123.       process containing the task, rather than the task itself
  12124.     if the process's system memory is swapped out, BX,CX,DX remain
  12125.       unchanged, because the memory usage cannot be determined
  12126. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  12127. ----------15DE23-----------------------------
  12128. INT 15 U - DESQview v2.31+ - ???
  12129.     AX = DE23h
  12130.     BX = ??? IRQ number on first PIC?
  12131.     CX = ??? IRQ number on second PIC?
  12132. Return: ???
  12133. Note:    called by QEMM 6.00+
  12134. ----------15DE24-----------------------------
  12135. INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
  12136.     AX = DE24h
  12137.     BX = length of .DVP data
  12138.     CX = length of ??? string
  12139.     DS:SI -> ??? string
  12140.     ES:DI -> .DVP data (see AX=102Ch)
  12141. Return: BX = segment of task handle??? or 0000h on error
  12142. Note:    this call is similar to AX=102Ch except that it can interpret the
  12143.       extended DVP data
  12144. SeeAlso: AX=102Ch
  12145. ----------15DE25-----------------------------
  12146. INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
  12147.     AX = DE25h
  12148.     ES:DI -> 67-byte buffer for ASCIZ directory name
  12149. Return: ES:DI buffer filled with directory from which DESQview was started
  12150. BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
  12151.       name, so if the buffer is not cleared to zeros before the call,
  12152.       there is no way to tell where the directory name ends.  This bug
  12153.       has been fixed in DV 2.52 (DV/X 1.02)
  12154. SeeAlso: AX=DE2Eh,INT 21/AH=47h
  12155. ----------15DE26-----------------------------
  12156. INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
  12157.     AX = DE26h
  12158. Return: BX = segment of handle for task with keyboard focus
  12159. Note:    under DESQview/X, the X server always has the keyboard focus unless a
  12160.       "direct" window is active
  12161. SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
  12162. ----------15DE27-----------------------------
  12163. INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
  12164.     AX = DE27h
  12165.     BX = type
  12166.         0000h process
  12167.         0001h task
  12168.     ES:DI -> list of Instance Item Structures (see below)
  12169. Return: CF clear if successful
  12170.         AX = ???
  12171.         BX = ???
  12172.     CF set on error
  12173.         AX = ???
  12174. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12175. SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
  12176.  
  12177. Format of Instance Item Structure [one element of list]:
  12178. Offset    Size    Description
  12179.  00h    WORD    length of data area DESQview should save and restore on context
  12180.         switches (0000h = end of list)
  12181.  02h    DWORD    pointer to area to be saved/restored
  12182. ----------15DE28-----------------------------
  12183. INT 15 U - DESQview v2.50+ - ???
  12184.     AX = DE28h
  12185.     BX = segment of ??? or 0000h for default
  12186.     ???
  12187. Return: ???
  12188. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12189. SeeAlso: AX=DE2Ah
  12190. ----------15DE29BX0000-----------------------
  12191. INT 15 U - DESQview v2.50+ - ???
  12192.     AX = DE29h
  12193.     BX = 0000h
  12194.     ???
  12195. Return: CF clear if successful
  12196.         ???
  12197.     CF set on error
  12198. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12199. ----------15DE29BX0001-----------------------
  12200. INT 15 U - DESQview v2.50+ - ???
  12201.     AX = DE29h
  12202.     BX = 0001h
  12203.     DX = segment of window handle
  12204. Return: CF clear if successful
  12205.         AX = ???
  12206.         DX = ???
  12207.     CF set on error
  12208. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12209. ----------15DE29BX0002-----------------------
  12210. INT 15 U - DESQview v2.50+ - ???
  12211.     AX = DE29h
  12212.     BX = 0002h
  12213.     DX = segment of window handle
  12214. Return: CF clear if successful
  12215.         AX = ???
  12216.         DX = ???
  12217.     CF set on error
  12218. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12219. ----------15DE29BX0003-----------------------
  12220. INT 15 U - DESQview v2.50+ - ???
  12221.     AX = DE29h
  12222.     BX = 0003h
  12223.     DX = segment of window handle
  12224. Return: CF clear if successful
  12225.         ???
  12226.     CF set on error
  12227. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12228. ----------15DE29BX0004-----------------------
  12229. INT 15 U - DESQview v2.50+ - GET DISPLAY NAME
  12230.     AX = DE29h
  12231.     BX = 0004h
  12232.     CX = size of buffer in bytes
  12233.     DX = segment of window handle
  12234.     ES:DI -> buffer for display name
  12235. Return: CF clear if successful
  12236.         buffer filled with ASCIZ display name (truncated if necessary) or
  12237.           null string if no display
  12238.     CF set on error
  12239. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12240.     the name ":0" refers to the local display
  12241. ----------15DE29BX0005-----------------------
  12242. INT 15 U - DESQview v2.50+ - ???
  12243.     AX = DE29h
  12244.     BX = 0005h
  12245.     ???
  12246. Return: CF clear if successful
  12247.         ???
  12248.     CF set on error
  12249. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12250. ----------15DE2A-----------------------------
  12251. INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
  12252.     AX = DE2Ah
  12253.     BX = segment of handle for task to interrupt or 0000h for caller
  12254.     DX:CX -> interrupt routine
  12255.     BP,SI,DI,DS,ES as required by interrupt routine
  12256. Return: nothing
  12257. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12258.     this call is the same as AX=DE20h except that it will delay
  12259.       interrupting the specified task until after it has exited DOS
  12260. SeeAlso: AX=1021h,AX=DE20h
  12261. ----------15DE2B-----------------------------
  12262. INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
  12263.     AX = DE2Bh
  12264.     ES:DI -> starting object
  12265.         0000h:0000h for first object in list???
  12266. Return: AX = status
  12267.         0000h successful
  12268.         ES:DI -> next object of same type (window/non-window)
  12269.         0001h failed (ES:DI was not a valid handle)
  12270. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12271.     there are two separate lists, one for window/task objects and one
  12272.       for all other objects
  12273. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
  12274. ----------15DE2CDX0100-----------------------
  12275. INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
  12276.     AX = DE2Ch
  12277.     DX = window information format version (0100h for DESQview 2.5x)
  12278.     BX = segment of window handle or 0000h for default
  12279.     ES:DI -> buffer for window information (see below)
  12280. Return: AX = status
  12281.         0000h successful
  12282. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12283. SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
  12284.  
  12285. Format of window information:
  12286. Offset    Size    Description
  12287.  00h    BYTE    task flag: 00h window, 01h task
  12288.  01h    BYTE    process number if owner task
  12289.         00h if non-owner task
  12290.  02h    WORD    segment of owner's handle, 0000h if orphaned
  12291.  04h    WORD    mapping context
  12292.  06h    BYTE    task status (see below)
  12293.  07h    BYTE    unused
  12294.  08h    WORD    status bits
  12295.         bit 0: DESQview process
  12296.         bit 1: process swapped out
  12297.         bit 2: process is resized direct window (suspended)
  12298.         bit 3: process suspended itself
  12299.         bit 4: user suspended process
  12300.         bit 5: process is being created
  12301.         bit 6: task is freeing another task
  12302.  0Ah    BYTE    01h if foreground-only window
  12303.  
  12304. Values for task status:
  12305.  00h "Waiting" waiting for input
  12306.  01h "Idle" keyboard poll limit reached
  12307.  03h same as 01h
  12308.  04h "Pausing" INT 15/AX=1000h pause called
  12309.  04h DV/X direct: user did something to allow task switch
  12310.  05h "ModeChg" video mode about to be changed
  12311.  06h "ModeNtf" notify that video mode changed
  12312.  07h "MoniCh" requested change to other monitor
  12313.  08h "StartPgm" control relinquished to start new process
  12314.  09h "MgrCan" made window manager CANCEL command
  12315.  0Ah "Slicing" time slice expired
  12316.  0Bh "Exit DOS" notify on DOS calls
  12317.  0Ch "Enter DOS" process is re-entering DOS
  12318.  0Dh "Terminate" INT 21/AH=4Ch or task freed
  12319.  0Eh "BrkNxt" Control-Break pressed
  12320.  0Fh "MgrCol" keyboard focus taken away
  12321.  10h "PgmInt" interrupted by API call from another task
  12322.  11h "BldOpen" call to INT 15/AX=DE01h
  12323. ----------15DE2D-----------------------------
  12324. INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
  12325.     AX = DE2Dh
  12326.     CX = direction
  12327.         FFFFh set socket handler
  12328.         DX:BX -> FAR function for socket interface
  12329.             must be of the format described under INT 63"DESQview"
  12330.         other get socket handler
  12331.         Return: DX:BX -> socket handler
  12332. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12333.     the "set" subfunction is normally called only by SOCKET.DVR
  12334. SeeAlso: AX=DE2Eh,INT 63"DESQview"
  12335. ----------15DE2E-----------------------------
  12336. INT 15 U - DESQview v2.50+ - SOCKET API
  12337.     AX = DE2Eh
  12338.     DX:BX -> socket record or 0000h:0000h to create a new socket record
  12339. Return: CX = size of socket record in bytes
  12340.     DX:BX -> socket record which was used
  12341. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12342.     socket records are allocated from common memory
  12343.     for Unix compatibility, each socket and connection on a socket is
  12344.       allocated a DOS file handle (referencing an SFT for NUL) which is
  12345.       used on various calls to specify which of possibly multiple
  12346.       connections is to be operated upon
  12347. SeeAlso: AX=DE2Dh,INT 63"DESQview"
  12348.  
  12349. Format of socket record:
  12350. Offset    Size    Description
  12351.  00h    WORD    signature F0ADh
  12352.  02h    WORD    function number
  12353.         0000h initialize socket???
  12354.         0001h "gethostname"
  12355.         0002h "ioctl" check for input
  12356.         0003h "sleep" delay for specified period
  12357.         0004h "htons" convert word to network (big-endian) byte order
  12358.         0005h "select"
  12359.         0006h "bsd_close"/"so_close" close socket
  12360.         0007h NOP
  12361.         0008h "connect" initiate connection on socket
  12362.         0009h "recv"/"recvfrom" read from socket
  12363.         000Ah "socket"
  12364.         000Bh ???
  12365.         000Ch "gethostbyname"
  12366.         000Dh "send"/"sendto" write to socket
  12367.         000Eh ??? (does something to all connections for process)
  12368.         000Fh "getpid" get process identifier
  12369.         0010h "gettimeofday"
  12370.         0011h "bind" assign name to socket
  12371.         0012h "listen" listen for connections on socket
  12372.         0013h "accept" accept connection on socket
  12373.         0014h connect to X server
  12374.         0015h "gethostbyaddr" get host information for an address
  12375.         0016h "getprotobyname"
  12376.         0017h "getprotobynumber"
  12377.         0018h "getservbyname"
  12378.         0019h "getservbyport"
  12379.         001Ah "getsockname" determine name bound to socket
  12380.         001Bh "getpeername" get name of connected peer
  12381.         001Ch "getsockopt"/"setsockopt"
  12382.         001Dh "so_exit"     close all sockets for calling process
  12383.         001Eh "issock" determine whether file handle references socket
  12384.         001Fh "so_attach" reattach previously detached socket
  12385.         0020h "so_detach" temporarily detach socket
  12386.         0021h get DESQview directory
  12387.         0022h "NewProc" start new application (see AX=102Ch)
  12388.         0023h "so_linkup"
  12389.         0024h canonicalize filename
  12390.         0025h indirect INT 15h call
  12391.         0026h Network Manager interface
  12392.         0027h "so_unlink"    close connection from "so_linkup"
  12393.         0028h "raisepriority"
  12394.         0029h "lowerpriority"
  12395.         002Ah ???
  12396.         FFFFh "NetExit" (appears to be a NOP)
  12397.  04h    WORD    returned error code (see below)
  12398.  06h    WORD    maximum message size??? (usually 0400h)
  12399.  08h    WORD    PSP segment to use or 0000h if socket not valid
  12400.  0Ah    WORD    scratch space (JFT size)
  12401.  0Ch    DWORD    scratch space (JFT address)
  12402.  10h    DWORD    mailbox handle (initialized by function 0000h)
  12403.  14h    DWORD    timer object handle (initialized by function 0000h)
  12404. ---function 0000h---
  12405.  18h    WORD    (return) ???
  12406. ---function 0001h---
  12407.  18h    WORD    (return) status???
  12408.  1Ah 128 BYTEs    (return) ASCIZ hostname (empty string if not on network)
  12409.  9Ah    WORD    maximum length of hostname to return
  12410. ---function 0002h---
  12411.  18h    WORD    (return) status
  12412.  1Ah    WORD    socket's file handle
  12413.  1Ch    WORD    IOCTL function
  12414.         05h "FIONREAD" determine available input
  12415.         06h "FIONBIO" set blocking state of socket
  12416.  1Eh    WORD    (return, subfn 05h) number of bytes available for reading
  12417.         (call, subfn 06h) 0000h blocking, nonzero nonblocking
  12418. ---function 0003h---
  12419.  18h  2 BYTEs    unused
  12420.  1Ah    WORD    delay time in seconds
  12421. ---function 0004h---
  12422.  18h    WORD    (return) result in network (big-endian) byte order
  12423.  1Ah    WORD    value to convert to network byte order
  12424. ---function 0005h---
  12425.  18h    WORD    (return) number of handles meeting the specified conditions???
  12426.  1Ah    WORD    number of file handles in each bitset???
  12427.  1Ch    DWORD    bitset of socket handles to check for readability???
  12428.  20h    DWORD    bitset of socket handles to check for writability???
  12429.  24h    DWORD    bitset of socket handles to check for errors???
  12430.  28h    WORD    timeout in ??? or 0000h to block until some socket ready
  12431.  2Ah    DWORD    ???
  12432.  2Eh    DWORD    ???
  12433. ---function 0006h---
  12434.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12435.  1Ah    WORD    socket's file handle
  12436. ---function 0008h---
  12437.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12438.  1Ah    WORD    socket's file handle
  12439.  1Ch    WORD    0001h if socket name specified, 0000h if not
  12440.  1Eh    WORD    length of socket name
  12441.  20h  N BYTEs    name of socket to which to connect
  12442. ---function 0009h---
  12443.  18h    WORD    (return) number of bytes actually read, 0000h if connection
  12444.             closed, or FFFFh on error
  12445.  1Ah    WORD    socket's file handle
  12446.  1Ch    WORD    number of bytes to read
  12447.  1Eh    WORD    flags
  12448.  20h    WORD    0000h if no source address desired
  12449.         0001h if source address is to be stored (datagram sockets)
  12450.  22h    WORD    length of source address
  12451.  24h 110 BYTEs    source address
  12452.  92h 1K BYTEs    buffer for data to be read
  12453. ---function 000Ah---
  12454.  18h    WORD    (return) socket's file handle or FFFFh on error
  12455.  1Ah    WORD    address family (0001h,0002h)
  12456.  1Ch    WORD    socket type
  12457.  1Eh    WORD    protocol
  12458. ---function 000Bh---
  12459.  18h    WORD    (return) 0001h if ??? or FFFFh on error
  12460.  1Ah    WORD    socket's file handle
  12461.  1Eh    WORD    (call) ???
  12462. ---function 000Ch---
  12463.  18h 128 BYTEs    buffer containing ASCIZ hostname
  12464.         special case if empty string or "unix"
  12465.  98h    ???    'struct hostent' ???
  12466.  A2h    ???    (return) ???
  12467. ---function 000Dh---
  12468.  18h    WORD    (return) number of bytes actually written or FFFFh on error
  12469.  1Ah    WORD    socket's file handle
  12470.  1Ch    WORD    number of bytes to write
  12471.  1Eh    WORD    number of bytes to follow in subsequent writes???
  12472.  20h    WORD    flags
  12473.  22h    WORD    0000h if no destination specified, 0001h if destination present
  12474.  24h    WORD    ???
  12475.  26h    WORD    length of destination address
  12476.  28h 110 BYTEs    destination address
  12477.  96h 1K BYTEs    buffer containing data to be written
  12478. ---function 000Eh---
  12479.  no additional fields
  12480. ---function 000Fh---
  12481.  18h    DWORD    (return) DESQview task handle of calling process
  12482. ---function 0010h---
  12483.  18h    DWORD    (return) current time
  12484.  1Ch    DWORD    (return) ???
  12485. ---function 0011h---
  12486.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12487.  1Ah    WORD    socket's file handle
  12488.  1Ch    WORD    length of name
  12489.  1Eh  N BYTEs    buffer for socket name
  12490. ---function 0012h---
  12491.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12492.  1Ah    WORD    socket's file handle
  12493.  1Ch    WORD    maximum backlog of pending connections allowed on socket
  12494. ---function 0013h---
  12495.  18h    WORD    (return) file handle for new connection or FFFFh on error
  12496.  1Ah    WORD    listen()ing socket's file handle
  12497.  1Ch    WORD    (call) length of buffer for connecting entity's address
  12498.         (return) actual length of address
  12499.  1Eh  N BYTEs    buffer for connecting entity's address
  12500. ---function 0014h---
  12501.  18h    WORD    (return) socket's file handle or FFFFh on error
  12502.  1Ah  4 BYTEs    (return) ???
  12503.  1Eh    WORD    (return) ???
  12504.  20h    WORD    (return) ???
  12505.  22h 256 BYTEs    ASCIZ X display name
  12506. 122h    ???
  12507. ---function 0015h---
  12508.  18h    WORD    (call) type of address??? (test for 0001h seen)
  12509.  1Ah    WORD    (call) length of buffer for host address
  12510.  1Ch 110 BYTEs    buffer containing host address
  12511.  8Ah    WORD    (return) offset of official host name???
  12512.  8Ch    WORD    (return) offset of alias list???
  12513.  8Eh    WORD    (return) address type???
  12514.  90h    WORD    (return) length of an address in bytes???
  12515.  92h    WORD    (return) offset of address???
  12516.  9Ah  N BYTEs    (return) ??? buffer for hostname, alias list, and host address
  12517. ---function 0016h---
  12518.  18h    ???    buffer for protocol name???
  12519.  98h    ???
  12520. ---function 0017h---
  12521.  18h    WORD    (call) protocol number???
  12522.  1Ah    WORD    (return) ??? or 0001h
  12523. ---function 0018h---
  12524.  18h 128 BYTEs    buffer containing ???
  12525.  98h 128 BYTEs    buffer containing ???
  12526. 118h    WORD    (return) ???
  12527. ---function 0019h---
  12528.  18h    WORD    length of name???
  12529.  1Ah 128 BYTEs    buffer for name???
  12530.  9Ah    WORD    (return) ???
  12531. ---function 001Ah---
  12532.  18h    WORD    (return) 0000h if successful, FFFFh on error
  12533.  1Ah    WORD    socket's file handle
  12534.  1Ch    WORD    (call) length of buffer for socket name
  12535.         (return) actual length of socket name
  12536.  1Eh  N BYTEs    buffer for socket name
  12537. ---function 001Bh---
  12538.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12539.  1Ah    WORD    socket's file handle
  12540.  1Ch    WORD    (call) size of buffer for name
  12541.         (return) actual size of name
  12542.  1Eh  N BYTEs    buffer for peer's name
  12543. ---function 001Ch---
  12544.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12545.  1Ah    WORD    direction: 0000h to get, 0001h to set
  12546.  1Ch    WORD    socket's file handle
  12547.  1Eh    WORD    option level
  12548.  20h    WORD    option name
  12549.  22h    WORD    (call) length of buffer for option value
  12550.         (return) actual length of option value
  12551.  24h  N BYTEs    buffer for option value
  12552. ---function 001Dh---
  12553.  no additional fields
  12554. ---function 001Eh---
  12555.  18h    WORD    (return) status: 0000h ??? or 0001h ???
  12556.  1Ah    WORD    file handle which may or may not be a socket
  12557. ---function 001Fh---
  12558.  18h    WORD    (return) file handle or FFFFh on error
  12559.  1Ah    DWORD    (call) pointer to Socket Context Record (see below) of a
  12560.             previously detached socket
  12561. ---function 0020h---
  12562.  18h    WORD    (return) status: 0000h if successful or FFFFh on error
  12563.  1Ah    WORD    socket's file handle
  12564.  1Ch    DWORD    (return) pointer to Socket Context Record (see below) for
  12565.             the file handle
  12566. ---function 0021h---
  12567.  18h 64 BYTEs    buffer for DESQview startup directory (see AX=DE25h)
  12568. ---function 0022h---
  12569.  18h    DWORD    (return) task handle of new application
  12570.  1Ch    WORD    size of .DVP data
  12571.  1Eh 129 BYTEs    ASCIZ ???
  12572.  9Fh  N BYTEs    .DVP data (see AX=102Ch)
  12573. ---function 0023h---
  12574.  18h    WORD    (return) ??? or FFFFh on error
  12575.  1Ah    WORD    socket's file handle???
  12576. ---function 0024h---
  12577.  18h    WORD    (return) DOS error code (see INT 21/AH=59h)
  12578.             0000h if successful
  12579.  1Ah 129 BYTEs    ASCIZ filename/pathname
  12580. 11Bh 129 BYTEs    ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
  12581. ---function 0025h---
  12582.  18h    WORD    value of AX
  12583.  1Ah    WORD    value of BX
  12584.  1Ch    WORD    (call) value of CX for call if AH value other than 12h
  12585.         (call) number of stack parameters if AH value is 12h
  12586.         (return) returned CX for calls other than INT 15/AH=12h
  12587.  1Eh    WORD    value of DX
  12588.  20h    WORD    value of DI
  12589.  22h    WORD    value of SI
  12590.  24h    WORD    value of DS
  12591.  26h    WORD    value of ES
  12592.  28h    WORD    (return) value of FLAGS after call
  12593.  2Ah  N DWORDs    (call) stack parameters for INT 15/AH=12h call
  12594.         (return) stack results from INT 15/AH=12h call
  12595. ---function 0026h---
  12596.  18h    WORD    (call) subfunction
  12597.             0004h "so_exit"???
  12598.             0005h "gethostbyname"
  12599.             0006h "gethostname"
  12600.             0009h "socket"
  12601.             000Dh "gethostbyaddr"
  12602.             000Fh "getprotobyname"
  12603.             0010h get protocol name for protocol number
  12604.             0011h "getservbyname"
  12605.             0012h "getservbyport"
  12606.             0013h "getsockname"???
  12607.             0016h ???
  12608.             0017h kill Network Manager
  12609.             0018h "getpeername"???
  12610.             0019h ??? (called by socket function 0000h)
  12611.             001Ah ???
  12612.             001Bh "so_linkup"
  12613.             001Dh get network services
  12614.             001Fh "getpwuid"
  12615.             0020h "getpwnam"
  12616.             0021h "getpwvar"
  12617.             0022h "crypt"
  12618.             0023h "so_unlink"
  12619.             0024h "getlogin"
  12620.             0028h "sethostent"
  12621.             0029h "gethostent"
  12622.             002Ah "soaddhost"
  12623.             002Bh "soupdatehost"
  12624.             002Ch "sodeletehost"
  12625.             002Dh "setservent"
  12626.             002Eh "getservent"
  12627.             002Fh "setpwent"
  12628.             0030h "getpwent"
  12629.             0031h ???
  12630.             0032h ???
  12631.             0033h ???
  12632.             0034h get IP network number
  12633.             0035h ??? (pops up Network Manager window)
  12634.             0037h ???
  12635.             0038h get machine name and IP address
  12636.             0039h ???
  12637.         (return) status???
  12638.  1Ah    WORD    (call) size of parameter data
  12639.         (return) size of returned data
  12640.  1Ch  N BYTEs    (call) parameter data required by call (see below)
  12641.         (return) result data (see below)
  12642. ---function 0027h---
  12643.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  12644.  1Ah    WORD    socket's file handle
  12645. ---functions 0028h,0029h---
  12646.  18h    WORD    (call) file handle for which to set priority low/high
  12647.             FFFFh to change calling task's priority
  12648. ---function 002Ah---
  12649.  no additional fields
  12650.  
  12651. Format of Function 0026h/Subfunction 000Fh data:
  12652. Offset    Size    Description
  12653.  00h  8 BYTEs    (return) ???
  12654.  
  12655. Format of Function 0026h/Subfunction 0010h data:
  12656. Offset    Size    Description
  12657.  00h  2 BYTEs    (return) ???
  12658.  02h    WORD    (return) protocol number
  12659.  04h    WORD    (call) protocol number for which to get name
  12660.  06h    WORD    (return) ???
  12661.  08h    var    (return) ASCIZ protocol name
  12662.  N    var    (return) ASCIZ protocol name
  12663.  
  12664. Format of Function 0026h/Subfunction 0011h data:
  12665. Offset    Size    Description
  12666.  00h  8 BYTEs    ???
  12667.  08h    var    (return) ASCIZ protocol name
  12668.     var    (return) ASCIZ ??? name
  12669.     var    (return) ASCIZ ??? name
  12670.  
  12671. Format of Function 0026h/Subfunction 0012h data:
  12672. Offset    Size    Description
  12673.  00h  8 BYTEs    (return) ???
  12674.  
  12675. Format of Function 0026h/Subfunction 0013h data:
  12676. Offset    Size    Description
  12677.  00h 116 BYTEs    (return) ???
  12678.  
  12679. Format of Function 0026h/Subfunction 0016h data:
  12680. Offset    Size    Description
  12681.  00h  4 BYTEs    (return) ???
  12682.  
  12683. Format of Function 0026h/Subfunction 0018h data:
  12684. Offset    Size    Description
  12685.  00h 116 BYTEs    (return) ???
  12686.  
  12687. Format of Function 0026h/Subfunction 0019h data:
  12688. Offset    Size    Description
  12689.  00h  4 BYTEs    (return) ???
  12690.  04h    DWORD    (return) task handle of ???
  12691.  
  12692. Format of Function 0026h/Subfunction 001Ah data:
  12693. Offset    Size    Description
  12694.  00h 38 BYTEs    (return) ???
  12695.  
  12696. Format of Function 0026h/Subfunction 001Bh data:
  12697. Offset    Size    Description
  12698.  00h 10 BYTEs    (return) ???
  12699.  
  12700. Format of Function 0026h/Subfunction 001Dh return data [array]:
  12701. Offset    Size    Description
  12702.  00h    WORD    ??? or FFFFh if end of array
  12703.  02h  7 BYTEs    ???
  12704.  09h 27 BYTEs    ASCIZ name of service
  12705.  
  12706. Format of Function 0026h/Subfunction 0024h return data:
  12707. Offset    Size    Description
  12708.  00h    var    ASCIZ username
  12709.  
  12710. Format of Function 0026h/Subfunction 0030h data:
  12711. Offset    Size    Description
  12712.  00h    WORD    (call) UID or 0000h for current user
  12713.         (return) ???
  12714.  02h    WORD    (return) UID
  12715.  04h  6 BYTEs    (return) ???
  12716.  0Ah    var    (return) ASCIZ username
  12717.     var    (return) ASCIZ encrypted password
  12718.     var    (return) ASCIZ initial ("home") directory
  12719.  
  12720. Format of Function 0026h/Subfunction 0034h data:
  12721. Offset    Size    Description
  12722.  00h  1-3 BYTEs    IP network number of caller's machine (low byte first)
  12723.  
  12724. Format of Function 0026h/Subfunction 0038h return data:
  12725. Offset    Size    Description
  12726.  00h    BYTE    ???
  12727.  01h  4 BYTEs    IP address
  12728.  05h    var    ASCIZ machine name
  12729.     ???
  12730.  
  12731. Values for error code:
  12732.  0000h successful
  12733.  0009h "BADF" bad file handle
  12734.  000Ch "ENOMEM" out of memory
  12735.  000Eh "EFAULT" bad address
  12736.  0016h "EINVAL" invalid argument
  12737.  0018h "EMFILE" too many open files
  12738.  0020h "EPIPE" ??? broken pipe
  12739.  0023h "EWOULDBLOCK" operation cannot be completed at this time
  12740.  0024h "EINPROGRESS" operation now in progress
  12741.  0026h "ENOTSOCK" socket invalid
  12742.  0028h "EMSGSIZE" message too long to send atomically
  12743.  002Ch "ESOCKTNOSUPPORT" socket type not supported
  12744.  002Fh "EAFNOSUPPORT" address family not supp. by protocol fam.
  12745.  0031h "EDOM" argument too large
  12746.  0038h "EISCONN" socket is already connected
  12747.  0039h "ENOTCONN" socket is not connected
  12748.  
  12749. Format of Socket Context Record:
  12750. Offset    Size    Description
  12751.  00h    DWORD    pointer to next Socket Context Record, 0000h:0000h if last
  12752.  04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
  12753.  06h    WORD    PSP segment of owner or 0000h
  12754.  08h    WORD    mapping context of owning window
  12755.  0Ah  2 BYTEs    ???
  12756.  0Ch    WORD    address family
  12757.  0Eh    WORD    socket type
  12758.  10h    WORD    protocol
  12759.  12h    WORD    socket state
  12760.         0001h created
  12761.         0002h bound
  12762.         0003h listening???
  12763.         0005h connected
  12764.  14h    DWORD    timer object handle
  12765.  18h    DWORD    object handle (mailbox???)
  12766.  1Ch    DWORD    object handle of parent of above object or 0000h:0000h
  12767.  20h    DWORD    pointer to ??? or 0000h
  12768.  24h  6 BYTEs    ???
  12769.  2Ah    WORD    file handle for socket or FFFFh
  12770.  2Ch  2 BYTEs    ???
  12771.  2Eh    WORD    nonzero if socket nonblocking
  12772. ---network connections only---
  12773.  30h  2 BYTEs    ???
  12774.  32h    WORD    ???
  12775.  34h  4 BYTEs    IP address of remote (big-endian)
  12776.  38h  6 BYTEs    ???
  12777. ----------15DE2F-----------------------------
  12778. INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
  12779.     AX = DE2Fh
  12780. Return: BX = status
  12781.         0001h keyboard focus has been given to a direct window since the
  12782.         last call
  12783.         0000h if not
  12784. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12785.     Quarterdeck states that this call will not be available under future
  12786.       versions of DESQview Classic
  12787. ----------15DE30-----------------------------
  12788. INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
  12789.     AX = DE30h
  12790. Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
  12791. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  12792.     you must first check the DESQview version to verify that it is 2.50 or
  12793.       greater
  12794. SeeAlso: INT 21/AH=2Bh/CX=4445h
  12795. ----------15E00F-----------------------------
  12796. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  12797.     AX = E00Fh
  12798.     ES:BX -> start of 2nd processor's execution
  12799. Return: AL = 0Fh successful
  12800.        = 00h failure    
  12801. SeeAlso: AX=E10Eh,AX=E200h
  12802. ----------15E10E-----------------------------
  12803. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  12804.     AX = E10Eh
  12805.     ES:BX -> start of 2nd processor's execution
  12806. Return: AL = 0Fh successful (halted)
  12807.        = 00h failure (not halted)
  12808. SeeAlso: AX=E00Fh,AX=E200h
  12809. ----------15E200-----------------------------
  12810. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  12811.     AX = E200h
  12812. Return: AX = 8000h if 2nd processor available
  12813. SeeAlso: AX=E00Fh,AX=E10Eh
  12814. ----------15E4-------------------------------
  12815. INT 15 - ???
  12816.     AH = E4h
  12817.     AL = subfunction
  12818.         21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
  12819.     DL = ???
  12820. Return: ???
  12821. ----------15F200CX454D-----------------------
  12822. INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???
  12823.     AX = F200h
  12824.     CX = 454Dh
  12825. Return: CF clear if hardware already initialised
  12826.         BX = upper RAM areas in use
  12827.         bit 0: C000-C3FF
  12828.         bit 1: C400-C7FF
  12829.         ...
  12830.         bit 11: EC00-EFFF
  12831.     CF set if hardware not initialised yet
  12832. ----------1600-------------------------------
  12833. INT 16 - KEYBOARD - GET KEYSTROKE
  12834.     AH = 00h
  12835. Return: AH = BIOS scan code
  12836.     AL = ASCII character
  12837. Notes:    on extended keyboards, this function discards any extended keystrokes,
  12838.       returning only when a non-extended keystroke is available
  12839.     the BIOS scan code is usually, but not always, the same as the hardware
  12840.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  12841.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  12842.       differs for shifted special keys.
  12843. SeeAlso: AH=01h,AH=05h,AH=10h,AH=20h,INT 18/AH=00h
  12844. ----------1601-------------------------------
  12845. INT 16 - KEYBOARD - CHECK FOR KEYSTROKE
  12846.     AH = 01h
  12847. Return: ZF set if no keystroke available
  12848.     ZF clear if keystroke available
  12849.         AH = BIOS scan code
  12850.         AL = ASCII character
  12851. Note:    if a keystroke is present, it is not removed from the keyboard buffer;
  12852.       however, any extended keystrokes which are not compatible with 83/84-
  12853.       key keyboards are removed in the process of checking whether a
  12854.       non-extended keystroke is available
  12855. SeeAlso: AH=00h,AH=11h,AH=21h,INT 18/AH=01h
  12856. ----------1602-------------------------------
  12857. INT 16 - KEYBOARD - GET SHIFT FLAGS
  12858.     AH = 02h
  12859. Return: AL = shift flags
  12860.         bit 7: Insert active
  12861.         6: CapsLock active
  12862.         5: NumLock active
  12863.         4: ScrollLock active
  12864.         3: Alt key pressed (either Alt on 101/102-key keyboards)
  12865.         2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  12866.         1: left shift key pressed
  12867.         0: right shift key pressed
  12868. SeeAlso: AH=12h,AH=22h,INT 18/AH=02h
  12869. ----------1603-------------------------------
  12870. INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY
  12871.     AH = 03h
  12872.     AL = subfunction
  12873.         00h set default delay and rate (PCjr and some PS/2)
  12874.         01h increase delay before repeat (PCjr)
  12875.         02h decrease repeat rate by factor of 2 (PCjr)
  12876.         03h increase delay and decrease repeat rate (PCjr)
  12877.         04h turn off typematic repeat (PCjr and some PS/2)
  12878.         05h set repeat rate and delay (AT,PS)
  12879.         BH = delay value (00h = 250ms to 03h = 1000ms)
  12880.         BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec)
  12881.         06h get current typematic rate and delay (newer PS/2s)
  12882.         Return: BL = repeat rate (see above)
  12883.             BH = delay (see above)
  12884. Note:    use INT 16/AH=09h to determine whether some of the subfunctions are
  12885.       supported
  12886. SeeAlso: INT 16/AH=09h
  12887. ----------1604-------------------------------
  12888. INT 16 - KEYBOARD - SET KEYCLICK (PCjr only)
  12889.     AH = 04h
  12890.     AL = keyclick state
  12891.         00h off
  12892.         01h on
  12893. SeeAlso: AH=03h
  12894. ----------1605-------------------------------
  12895. INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
  12896.     AH = 05h
  12897.     CH = scan code
  12898.     CL = ASCII character
  12899. Return: AL = 00h if successful
  12900.          01h if keyboard buffer full
  12901. Note:    under DESQview, the following "keystrokes" invoke the following
  12902.       actions when they are read from the keyboard buffer:
  12903.         38FBh or FB00h    switch to next window (only if main menu
  12904.                 popped up)
  12905.         38FCh or FC00h    pop up DESQview main menu
  12906.         38FEh or FE00h    close the current window
  12907.         38FFh or FF00h    pop up DESQview learn menu
  12908. SeeAlso: AH=00h,AH=71h,AH=FFh,INT 15/AX=DE10h
  12909. ----------1605-------------------------------
  12910. INT 16 - KEYBOARD - SELECT KEYBOARD LAYOUT (PCjr only)
  12911.     AH = 05h
  12912.     AL = function
  12913.         01h set keyboard layout to French
  12914.         02h set keyboard layout to German
  12915.         03h set keyboard layout to Italian
  12916.         04h set keyboard layout to Spanish
  12917.         05h set keyboard layout to UK
  12918.         80h check if function supported
  12919.         Return: AL <> 80h if supported
  12920. Return: ???
  12921. Note:    called by DOS 3.2 KEYBxx.COM
  12922. SeeAlso: AH=92h,AH=A2h
  12923. ----------1609-------------------------------
  12924. INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY
  12925.     AH = 09h
  12926. Return: AL = keyboard functions supported
  12927.         bit 7: reserved
  12928.         bit 6: 
  12929.         bit 5:
  12930.         bit 4: INT 16/AH=0Ah supported
  12931.         bit 3: INT 16/AX=0306h supported
  12932.         bit 2: INT 16/AX=0305h supported
  12933.         bit 1: INT 16/AX=0304h supported
  12934.         bit 0: INT 16/AX=0300h supported
  12935. Note:    this function is only available if bit 6 of the second feature byte
  12936.       returned by INT 15/AH=C0h is set
  12937. SeeAlso: AH=03h,AH=0Ah,INT 15/AH=C0h
  12938. ----------160A-------------------------------
  12939. INT 16 - KEYBOARD - GET KEYBOARD ID
  12940.     AH = 0Ah
  12941. Return: BX = keyboard ID
  12942. Note:    check return value from AH=09h to determine whether this function is
  12943.       supported
  12944. SeeAlso: AH=09h
  12945. ----------1610-------------------------------
  12946. INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only)
  12947.     AH = 10h
  12948. Return: AH = BIOS scan code
  12949.     AL = ASCII character
  12950. Notes:    if no keystroke is available, this function waits until one is placed
  12951.       in the keyboard buffer
  12952.     the BIOS scan code is usually, but not always, the same as the hardware
  12953.       scan code processed by INT 09.  It is the same for ASCII keystrokes
  12954.       and most unshifted special keys (F-keys, arrow keys, etc.), but
  12955.       differs for shifted special keys.
  12956.     unlike AH=00h, this function does not discard extended keystrokes
  12957. SeeAlso: AH=00h,AH=11h,AH=20h
  12958. ----------1611-------------------------------
  12959. INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only)
  12960.     AH = 11h
  12961. Return: ZF set if no keystroke available
  12962.     ZF clear if keystroke available
  12963.         AH = BIOS scan code
  12964.         AL = ASCII character
  12965. Notes:    if a keystroke is available, it is not removed from the keyboard buffer
  12966.     unlike AH=01h, this function does not discard extended keystrokes
  12967. SeeAlso: AH=01h,AH=10h,AH=21h
  12968. ----------1612-------------------------------
  12969. INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only)
  12970.     AH = 12h
  12971. Return: AL = shift flags 1 (same as returned by AH=02h)
  12972.         bit 7: Insert active
  12973.         6: CapsLock active
  12974.         5: NumLock active
  12975.         4: ScrollLock active
  12976.         3: Alt key pressed (either Alt on 101/102-key keyboards)
  12977.         2: Ctrl key pressed (either Ctrl on 101/102-key keyboards)
  12978.         1: left shift key pressed
  12979.         0: right shift key pressed
  12980.     AH = shift flags 2
  12981.         bit 7: SysRq key pressed
  12982.         6: CapsLock pressed
  12983.         5: NumLock pressed
  12984.         4: ScrollLock pressed
  12985.         3: right Alt key pressed
  12986.         2: right Ctrl key pressed
  12987.         1: left Alt key pressed
  12988.         0: left Ctrl key pressed
  12989. Notes:    AL bit 3 set only for left Alt key on many machines
  12990.     AH bits 7 through 4 always clear on a Compaq SLT/286
  12991. SeeAlso: AH=02h,AH=22h,AH=51h
  12992. ----------1620-------------------------------
  12993. INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE???
  12994.     AH = 20h
  12995. Return: ??? see AH=10h
  12996. Note:    use AH=09h to determine whether this function is supported
  12997. SeeAlso: AH=00h,AH=10h,AH=21h
  12998. ----------1621-------------------------------
  12999. INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE???
  13000.     AH = 21h
  13001. Return: ??? see AH=11h
  13002. Note:    use AH=09h to determine whether this function is supported
  13003. SeeAlso: AH=01h,AH=11h,AH=20h
  13004. ----------1622-------------------------------
  13005. INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS???
  13006.     AH = 22h
  13007. Return: ??? see AH=12h
  13008. Note:    use AH=09h to determine whether this function is supported
  13009. SeeAlso: AH=02h,AH=12h
  13010. ----------164252-----------------------------
  13011. INT 16 - TEXTCAP 2.0 - INSTALLATION CHECK
  13012.     AX = 4252h
  13013. Return: AX = 5242h if installed
  13014. Note:    TEXTCAP 2.0 is a heavily modified (by Gisbert W. Selke) version of the
  13015.       PC Magazine utility CAPTURE written by Tom Kihlken
  13016. SeeAlso: AX=4253h,AX=4254h
  13017. ----------164253-----------------------------
  13018. INT 16 - TEXTCAP 2.0 - UNINSTALL
  13019.     AX = 4253h
  13020. Return: AX = segment of resident code
  13021. Notes:    the uninstall code does not check whether interrupt vectors have been
  13022.       chained by other programs
  13023.     the caller must free the main memory block (using the returned segment)
  13024. SeeAlso: AX=4252h,AX=4254h
  13025. ----------164254-----------------------------
  13026. INT 16 - TEXTCAP 2.0 - DUMP TEXT SCREEN TO FILE
  13027.     AX = 4254h
  13028. Return: AX = status
  13029.         4254h if screen dump will be written as soon as disk becomes idle
  13030.         5442h if screen dump written
  13031. SeeAlso: AX=4252h,AX=4253h
  13032. ----------164500-----------------------------
  13033. INT 16 - Shamrock Software EMAIL - GET STATUS
  13034.     AX = 4500h
  13035.     DL = port number (01h = COM1)
  13036.     ES:BX -> 13-byte buffer for ASCIZ name
  13037. Return: AX = 4D00h if EMAIL installed on specified port
  13038.         ES:BX -> "" if no connection
  13039.           -> "*" if connection but caller has not identified name
  13040.           -> name otherwise
  13041.         CX = version (CH = major, CL = minor)
  13042.         DL = privilege level of user (00h = guest)
  13043.         DH = chosen language (00h German, 01h English)
  13044. SeeAlso: AX=4501h,AX=4502h
  13045. ----------164501-----------------------------
  13046. INT 16 - Shamrock Software EMAIL - GET ELAPSED ONLINE TIME AND MAXIMUM TIME
  13047.     AX = 4501h
  13048.     DL = port number (01h = COM1)
  13049. Return: AX = 4D00h if EMAIL installed on specified port
  13050.         BX = maximum connect time in clock ticks
  13051.         CX = maximum connect time for guests (without name) in clock ticks
  13052.         DX = elapsed connect time of current user in clock ticks
  13053. SeeAlso: AX=4500h    
  13054. ----------164502-----------------------------
  13055. INT 16 - Shamrock Software EMAIL - GET CURRENT COMMUNICATIONS PARAMETERS
  13056.     AX = 4502h
  13057.     DL = port number (01h = COM1)
  13058. Return: AX = 4D00h if EMAIL installed on specified port
  13059.         BL = current value of serial port's Line Control Register
  13060.         BH = flags
  13061.         bit 0: ISO code
  13062.             1: pause
  13063.             2: linefeed
  13064.             3: ANSI sequences
  13065.         CX = selected country code (33 = France, 49 = Germany, etc)
  13066.         DX = baudrate divisor (115200/DX = baudrate)
  13067. SeeAlso: AX=4500h
  13068. ----------164503-----------------------------
  13069. INT 16 - Shamrock Software EMAIL - SPECIFY COMMAND-WORD FOR USER FUNCTION
  13070.     AX = 4503h
  13071.     DL = port number (01h = COM1)
  13072.     DH = maximum execution time in clock ticks (00h = 5 seconds)
  13073.     ES:BX -> ASCIZ string with new user command-word
  13074. Return: AX = 4D00h if EMAIL installed on specified port
  13075. Notes:    a single user command (consisting of only uppercase letters and digits)
  13076.       may be defined, and remains valid until it is overwritten or the
  13077.       EMAIL program terminates; the user command must be activated by
  13078.       calling AX=4504h at least once.
  13079.     an existing command word may be redefined with this function
  13080. SeeAlso: AX=4504h,AX=4505h
  13081. ----------164504-----------------------------
  13082. INT 16 - Shamrock Software EMAIL - CHECK FOR USER FUNCTION COMMAND-WORD
  13083.     AX = 4504h
  13084.     DL = port number (01h = COM1)
  13085.     ES:BX -> 80-byte buffer for ASCIZ user input line
  13086. Return: AX = 4D00h if EMAIL installed on specified port
  13087.         DL = flags
  13088.         bit 0: user function supported (always set)
  13089.             1: user entered user-function command word
  13090.         if DL bit 1 set,
  13091.         ES:BX buffer contains line entered by user which begins with
  13092.             the defined command word and has been converted to all
  13093.             caps
  13094. Note:    caller must process the returned commandline and invoke AX=4505h
  13095.       within five seconds with the result of that processing
  13096. SeeAlso: AX=4503h,AX=4505h
  13097. ----------164505-----------------------------
  13098. INT 16 - Shamrock Software EMAIL - SEND RESULT OF USER FUNCTION
  13099.     AX = 4505h
  13100.     DL = port number (01h = COM1)
  13101.     DH = error flag
  13102.         bit 3: set on error
  13103.     ES:BX -> ASCIZ text to return to user, max 1024 bytes
  13104. Return: AH = 4Dh if EMAIL installed on specified port
  13105.     AL = status
  13106.         00h successful
  13107.         02h unable to perform function (timeout, prev call not complete)
  13108.         other error
  13109. Notes:    if the error flag in DH is set, the string is not sent and an error
  13110.       message is generated instead; if this function is not called within
  13111.       five seconds of AX=4504h, EMAIL automatically generates an error
  13112.       message
  13113.     the string is copied into an internal buffer, allowing this function's
  13114.       caller to continue immediately
  13115. SeeAlso: AX=4503h,AX=4504h,INT 17/AX=2400h
  13116. ----------164506-----------------------------
  13117. INT 16 - Shamrock Software EMAIL - MONITOR XMODEM DOWNLOAD
  13118.     AX = 4506h
  13119.     DL = port number (01h = COM1)
  13120.     ES:BX -> 13-byte buffer for ASCIZ filename
  13121. Return: AX = 4D00h if EMAIL installed on specified port
  13122.         DH = Xmodem status
  13123.         00h no XGET command given
  13124.         01h XGET in progress
  13125.         02h XGET completed successfully
  13126.         ES:BX buffer filled with last filename given to XGET command
  13127.         (without path)
  13128. Note:    DH=02h will only be returned once per XGET; subsequent calls will
  13129.       return DH=00h
  13130. SeeAlso: AX=4500h,INT 17/AX=2408h
  13131. ----------165000-----------------------------
  13132. INT 16 - KEYBOARD - AX PC - SET KEYBOARD COUNTRY CODE
  13133.     AX = 5000h
  13134.     BX = country code
  13135.         0001h USA (English), 0051h Japan
  13136. Return: AL = status
  13137.         00h successful
  13138.         01h bad country code
  13139.         02h other error
  13140. SeeAlso: AX=5001h,INT 10/AX=5000h,INT 17/AX=5000h
  13141. ----------165001-----------------------------
  13142. INT 16 - KEYBOARD - AX PC - GET KEYBOARD COUNTRY CODE
  13143.     AX = 5001h
  13144. Return: AL = status
  13145.         00h successful
  13146.         BX = country code
  13147.         02h error
  13148. SeeAlso: AX=5000h,INT 10/AX=5001h,INT 17/AX=5001h
  13149. ----------1651-------------------------------
  13150. INT 16 - KEYBOARD - AX PC - READ SHIFT KEY STATUS
  13151.     AH = 51h
  13152. Return: AL = standard shift key states (see AH=12h)
  13153.     AH = Kana lock (00h off, 01h on)
  13154. SeeAlso: AH=02h,AH=12h,AH=22h
  13155. ----------165500-----------------------------
  13156. INT 16 - Microsoft Word internal - MICROSOFT WORD COOPERATION WITH TSR
  13157.     AX = 5500h
  13158. Return: AX = 4D53h ('MS') if keyboard TSR present
  13159. Notes:    during startup, Microsoft Word tries to communicate with any TSRs
  13160.       that are present through this call.
  13161.     if the return is not 4D53h, Word installs its own INT 09 and INT 16
  13162.       handlers; otherwise it assumes that the TSR will handle the keyboard
  13163. SeeAlso: INT 1A/AX=3601h
  13164. ----------1655FF-----------------------------
  13165. INT 16 - Swap Utilities - ???
  13166.     AX = 55FFh
  13167.     BX >= 0004h
  13168.     CX = function
  13169.         0000h set ??? flag
  13170.         other clear ??? flag
  13171. Note:    present in SWAPSH and SWAPDT v1.77j, distributed with PC Tools 7
  13172. ----------166969BX6968-----------------------
  13173. INT 16 - PC Tools v5.1+ BACKTALK - UNHOOK
  13174.     AX = 6969h
  13175.     BX = 6968h
  13176. Return: resident code unhooked, but not removed from memory
  13177. ----------166969BX6969-----------------------
  13178. INT 16 - PC Tools v5.1+ BACKTALK - INSTALLATION CHECK
  13179.     AX = 6969h
  13180.     BX = 6969h
  13181.     DX = 0000h
  13182. Return: DX nonzero if installed
  13183.         BX = CS of resident code
  13184.         DX = PSP segment of resident code
  13185.         DS:SI -> ASCIZ identification string "CPoint Talk"
  13186. ----------166F00BX0000-----------------------
  13187. INT 16 - HP Vectra - ??? - INSTALLATION CHECK
  13188.     AX = 6F00h
  13189.     BX = 0000h
  13190. Return: BX = 4850h if present
  13191. Note:    called by recent MS Mouse drivers
  13192. ----------166F0D-----------------------------
  13193. INT 16 - HP Vectra - ???
  13194.     AX = 6F0Dh
  13195.     ???
  13196. Return: ???
  13197. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
  13198. SeeAlso: AX=6F0Eh
  13199. ----------166F0E-----------------------------
  13200. INT 16 - HP Vectra - ???
  13201.     AX = 6F0Eh
  13202.     ???
  13203. Return: ???
  13204. Note:    called by MS Windows HPSYSTEM.DRV and HPEBIOS.386
  13205. SeeAlso: AX=6F0Dh
  13206. ----------1670-------------------------------
  13207. INT 16 - FAKEY.COM - INSTALLATION CHECK
  13208.     AH = 70h
  13209. Return: AX = 1954h if installed
  13210. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  13211. ----------1671-------------------------------
  13212. INT 16 - FAKEY.COM - PUSH KEYSTROKES
  13213.     AH = 71h
  13214.     CX = number of keystrokes
  13215.     DS:SI -> array of words containing keystrokes to be returned by AH=00h
  13216. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  13217. SeeAlso: AH=05h,AH=72h
  13218. ----------1672-------------------------------
  13219. INT 16 - FAKEY.COM - CLEAR FAKED KEYSTROKES
  13220.     AH = 72h
  13221. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  13222. SeeAlso: AH=71h
  13223. ----------1673-------------------------------
  13224. INT 16 - FAKEY.COM - PLAY TONES
  13225.     AH = 73h
  13226.     CX = number of tones to play
  13227.     DS:SI -> array of tones (see below)
  13228. Note:    FAKEY is a keystroke faking utility by System Enhancement Associates
  13229. SeeAlso: INT 15/AX=1019h
  13230.  
  13231. Format of tone array entries:
  13232. Offset    Size    Description
  13233.  00h    WORD    divisor for timer channel 2
  13234.  02h    WORD    duration in clock ticks
  13235. ----------1675-------------------------------
  13236. INT 16 - pcANYWHERE III - SET TICK COUNT FOR SCANNING
  13237.     AH = 75h
  13238.     AL = number of ticks between checks for new screen changes
  13239. ----------1676-------------------------------
  13240. INT 16 - pcANYWHERE III - SET ERROR CHECKING TYPE
  13241.     AH = 76h
  13242.     AL = error checking type
  13243.         00h none
  13244.         01h fast
  13245.         02h slow
  13246. ----------1677-------------------------------
  13247. INT 16 - pcANYWHERE III - LOG OFF
  13248.     AH = 77h
  13249.     AL = mode
  13250.         00h wait for another call
  13251.         01h leave in Memory Resident Mode
  13252.         02h leave in Automatic Mode
  13253.         FFh leave in current operating mode
  13254. ----------167761-----------------------------
  13255. INT 16 - WATCH.COM v2.x-v3.0 - INSTALLATION CHECK
  13256.     AX = 7761h ('wa')
  13257. Return: AX = 5741h ('WA') if installed
  13258. Note:    WATCH.COM is part of the "TSR" package by Kim Kokkonen
  13259. SeeAlso: INT 21/AX=7761h
  13260. ----------167788BX7789-----------------------
  13261. INT 16 - PC Magazine PUSHDIR.COM - INSTALLATION CHECK
  13262.     AX = 7788h
  13263.     BX = 7789h
  13264.     DS:SI -> signature "PUSHDIR VERSION 1.0"
  13265. Return: AX = 7789h if installed and signature correct
  13266.     BX = 7788h
  13267.     SI destroyed          
  13268. ----------1679-------------------------------
  13269. INT 16 - pcANYWHERE III - CHECK STATUS
  13270.     AH = 79h
  13271. Return: AX = status
  13272.         FFFFh if resident and active
  13273.         FFFEh if resident but not active
  13274.         FFFDh if in Memory Resident mode
  13275.         FFFCh if in Automatic mode
  13276.         other value if not resident
  13277. SeeAlso: AX=7B00h,INT 21/AX=2B44h
  13278. ----------167A-------------------------------
  13279. INT 16 - pcANYWHERE III - CANCEL SESSION
  13280.     AH = 7Ah
  13281. ----------167B00-----------------------------
  13282. INT 16 - pcANYWHERE III - SUSPEND
  13283.     AX = 7B00h
  13284. SeeAlso: AH=79h,AX=7B01h
  13285. ----------167B01-----------------------------
  13286. INT 16 - pcANYWHERE III - RESUME
  13287.     AX = 7B01h
  13288. SeeAlso: AH=79h,AX=7B00h
  13289. ----------167C-------------------------------
  13290. INT 16 - pcANYWHERE III - GET PORT CONFIGURATION
  13291.     AH = 7Ch
  13292. Return: AH = port number
  13293.     AL = baud rate
  13294.         00h = 50 baud
  13295.         01h = 75 baud
  13296.         02h = 110 baud
  13297.         03h = 134.5 baud
  13298.         04h = 150 baud
  13299.         05h = 300 baud
  13300.         06h = 600 baud
  13301.         07h = 1200 baud
  13302.         08h = 1800 baud
  13303.         09h = 2000 baud
  13304.         0Ah = 2400 baud
  13305.         0Bh = 4800 baud
  13306.         0Ch = 7200 baud
  13307.         0Dh = 9600 baud
  13308.         0Eh = 19200 baud
  13309. ----------167D-------------------------------
  13310. INT 16 - pcANYWHERE III - GET/SET TERMINAL PARAMETERS
  13311.     AH = 7Dh
  13312.     AL = subfunction
  13313.         00h set terminal parameters
  13314.         01h get terminal parameters
  13315.         02h get configuration header and terminal parameters
  13316.     DS:CX -> terminal parameter block
  13317. ----------167E-------------------------------
  13318. INT 16 - pcANYWHERE III - COMMUNICATIONS I/O THROUGH PORT
  13319.     AH = 7Eh
  13320.     AL = subfunction
  13321.         01h port input status
  13322.         Return AX = 0 if no characer ready,
  13323.                AX = 1 if character ready
  13324.         02h port input character
  13325.         Return AL = received character
  13326.         03h port output character in CX
  13327.         11h hang up phone
  13328. ----------167F-------------------------------
  13329. INT 16 - pcANYWHERE III - SET KEYBOARD/SCREEN MODE
  13330.     AH = 7Fh
  13331.     AL = subfunction
  13332.         00h enable remote keyboard only
  13333.         01h enable host keyboard only
  13334.         02h enable both keyboards
  13335.         08h display top 24 lines
  13336.         09h display bottom 24 lines
  13337.         10h Hayes modem
  13338.         11h other modem
  13339.         12h direct connect
  13340. ----------1680-------------------------------
  13341. INT 16 - MAKEY.COM - INSTALLATION CHECK
  13342.     AH = 80h
  13343. Return: AX = 1954h if installed
  13344. Note:    MAKEY is a utility by System Enhancement Associates
  13345. ----------168765BX4321-----------------------
  13346. INT 16 - AT.COM version 8/26/87 - API
  13347.     AX = 8765h
  13348.     BX = 4321h
  13349.     CX = ??? or FFFFh
  13350.     if CX = FFFFh
  13351.         DX = number of event to remove or FFFFh
  13352. Return: ES:BX -> event record array
  13353. Note:    AT.COM is a resident scheduler by Bill Frolik
  13354.  
  13355. Format of event record:
  13356. Offset    Size    Description
  13357.  00h    BYTE    in-use flag (00h free, 01h in use, FFh end of array)
  13358.  01h    BYTE    day of date on which to trigger
  13359.  02h    BYTE    month of date on which to trigger
  13360.  03h    BYTE    trigger time, minute
  13361.  04h    BYTE    trigger time, hour
  13362.  05h    WORD    offset of command to be executed
  13363. ----------1692-------------------------------
  13364. INT 16 - ???
  13365.     AH = 92h
  13366. Return: AH <= 80h if ???
  13367. Note:    called by DOS 3.2 KEYBxx.COM and DOS 5.0 KEYB.COM
  13368. SeeAlso: AH=05h"PCjr",AH=A2h
  13369. ----------1699-------------------------------
  13370. INT 16 - SCOUT v5.4 - GET ???
  13371.     AH = 99h
  13372. Return: AX = ABCDh
  13373.     BX:CX -> ??? (appears to be start of PSP for resident portion)
  13374. Note:    Scout is a memory-resident file manager by New-Ware
  13375. SeeAlso: AH=9Eh
  13376. ----------169E-------------------------------
  13377. INT 16 - SCOUT v5.4 - INSTALLATION CHECK
  13378.     AH = 9Eh
  13379. Return: AX = ABCDh if installed
  13380. Note:    Scout is a memory-resident file manager by New-Ware
  13381. SeeAlso: AH=99h
  13382. ----------16A2-------------------------------
  13383. INT 16 - ???
  13384.     AH = A2h
  13385. Return: AH <= 80h if ???
  13386. Note:    this function is called by DOS 5.0 KEYB.COM
  13387. SeeAlso: AH=92h
  13388. ----------16AA-------------------------------
  13389. INT 16 - PTxxx.COM - (xxx=CGA,EGA,VGA,HER...) CALL GATE FOR GRAPHICS
  13390.     AH = AAh
  13391.     Various registers set up by high level language.
  13392. Return: Graphics performed
  13393. Note:    PT stands for Paint Tools which is a graphics library for Turbo Pascal,
  13394.       Modula 2 and others from DataBiten in Sweden. The library is
  13395.       installed as a memory resident driver.
  13396. ----------16CA--BX736B-----------------------
  13397. INT 16 - CtrlAlt Associates STACKEY.COM v3.00 - API
  13398.     AH = CAh
  13399.     BX = 736Bh ("sk")
  13400.     CX = 736Bh
  13401.     AL = function
  13402.         00h installation check
  13403.         Return: DX = words available in keyboard buffer
  13404.         01h place keystroke in buffer
  13405.         DX = keystroke (DH = scan code, DL = ASCII character)
  13406.         Return: DX = words available in keyboard buffer
  13407.                 FFFFh on error
  13408.         02h flush STACKEY and BIOS keyboard buffers
  13409. Return: AX = CAFFh if installed
  13410.         BX = segment of resident code
  13411.         CX = STACKEY version (CH = major, CL = minor)
  13412. Note:    STACKEY is a shareware keyboard-input faking TSR
  13413. ----------16CA00BX6570-----------------------
  13414. INT 16 - CtrlAlt Associates EGAPAL.COM v1.00 - INSTALLATION CHECK
  13415.     AX = CA00h
  13416.     BX = 6570h ("ep")
  13417.     CX = 6570h
  13418. Return: AX = CAFFh if installed
  13419.         BX = segment of resident code
  13420.         CX = ??? (0090h)
  13421. Note:    EGAPAL is a TSR supplied with STACKEY which makes EGA palette settings
  13422.       permanent across mode switches
  13423. SeeAlso: AX=CA00h/BX=7670h
  13424. ----------16CA00BX7670-----------------------
  13425. INT 16 - CtrlAlt Associates VGAPAL.COM v1.00 - INSTALLATION CHECK
  13426.     AX = CA00h
  13427.     BX = 7670h ("vp")
  13428.     CX = 7670h
  13429. Return: AX = CAFFh if installed
  13430.         BX = segment of resident code
  13431.         CX = ??? (0090h)
  13432. Note:    VGAPAL is a TSR supplied with STACKEY which makes VGA palette settings
  13433.       permanent across mode switches
  13434. SeeAlso: AX=CA00h/BX=6570h
  13435. ----------16E0E0-----------------------------
  13436. INT 16 - TurboPower TSRs - ALTERNATE INSTALLATION CHECK
  13437.     AX = E0E0h
  13438. Return: AX = 1F1Fh if installed
  13439.         DWORD 0040h:00F0h -> last data block in TSR list (see AX=F0F0h)
  13440. Note:    the returned TSR list provides support for communication among TSRs
  13441.       built with TurboPower's Turbo Professional and Object Professional
  13442.       libraries for Turbo Pascal
  13443. SeeAlso: AX=F0F0h
  13444. ----------16ED--BHED-------------------------
  13445. INT 16 - BORLAND TURBO LIGHTNING - API
  13446.     AH = EDh
  13447.     BH = EDh
  13448.     BL = function
  13449.         00h installation check
  13450.         Return: AX = 5205h
  13451.             CH = major version
  13452.             CL = minor version
  13453.         01h ???
  13454.         02h get resident CS
  13455.         Return: AX = code segment of resident portion
  13456.         03h get resident ???
  13457.         Return: AX = offset of some buffer in resident code seg
  13458.         04h ???
  13459.         05h set ???
  13460.         AL = 0 to 0Ch
  13461.         Return: AX = status
  13462.                 0000h if OK
  13463.                 0001h if out of range.
  13464.         06h ???
  13465.         07h ???
  13466.         08h ???
  13467.         AL = char???
  13468.         CX = ???
  13469.         DX = ???
  13470.         Return: AX = 0, 1 or 2
  13471.         09h ???
  13472.         0Ah ???
  13473.         CX = ???
  13474.         DX = ???
  13475.         Return: AX = ???
  13476.         0Bh ???
  13477.         DS:SI -> ???
  13478.         Return: AX = 0, 40h, 80h
  13479.         0Ch ???
  13480.         DS:SI -> ???
  13481.         Return: AH = 0
  13482.             AL = ???
  13483.         0Dh set ???
  13484.         (sets an internal flag)
  13485.         0Eh ???
  13486.         DS:SI -> ???
  13487.         Return: AX = 0, 1 or 2.
  13488.         0Fh ???
  13489.         10h ???
  13490. Notes:    AX in general returns an error code from most functions.
  13491. ----------16F0-------------------------------
  13492. INT 16 - Compaq 386 - SET CPU SPEED
  13493.     AH = F0h
  13494.     AL = speed
  13495.         00h equivalent to 6 MHz 80286 (COMMON)
  13496.         01h equivalent to 8 MHz 80286 (FAST)
  13497.         02h full 16 MHz (HIGH)
  13498.         03h toggles between 8 MHz-equivalent and speed set by system board
  13499.         switch (AUTO or HIGH)
  13500.         08h full 16 MHz except 8 MHz-equivalent during floppy disk access
  13501.         09h specify speed directly
  13502.         CX = speed value, 1 (slowest) to 50 (full), 3 ~= 8088
  13503. SeeAlso: AH=F1h,AH=F3h
  13504. ----------16F0F0-----------------------------
  13505. INT 16 - TurboPower TSRs - INSTALLATION CHECK
  13506.     AX = F0F0h
  13507. Return: AX = 0F0Fh if installed
  13508.         ES:DI -> last data block in TSR list
  13509. Note:    the returned TSR list provides support for communication among TSRs
  13510.       built with TurboPower's Turbo Professional and Object Professional
  13511.       libraries for Turbo Pascal
  13512. SeeAlso: AX=E0E0h
  13513.  
  13514. Format of data block:
  13515. Offset    Size    Description
  13516.  00h    DWORD    pointer to program tag (counted ASCII string)
  13517.  04h    WORD    interface version number (0400h)
  13518.  06h    DWORD    pointer to command entry point
  13519.  0Ah    DWORD    pointer to previous data block (0000h:0000h if none)
  13520.  0Eh    DWORD    pointer to next data block (0000h:0000h if none)
  13521. ---swappable TSRs only---
  13522.  12h    DWORD    pointer to swapping data
  13523.  16h    DWORD    pointer to user data
  13524.     more???
  13525. ----------16F1-------------------------------
  13526. INT 16 - Compaq 386 - READ CURRENT CPU SPEED
  13527.     AH = F1h
  13528. Return:    AL = speed code (see AH=F0h)
  13529.          if AL = 09h, CX = speed code
  13530. SeeAlso: AH=F0h,AH=F3h
  13531. ----------16F2-------------------------------
  13532. INT 16 - Compaq 386 - DETERMINE ATTACHED KEYBOARD TYPE
  13533.     AH = F2h
  13534. Return: AL = type
  13535.         00h if 11-bit AT keyboard is in use
  13536.         01h if 9-bit PC keyboard is in use 
  13537. ----------16F3-------------------------------
  13538. INT 16 - Compaq 80286s - SET CPU SPEED LIMIT (OVERRIDE JUMPER)
  13539.     AH = F3h
  13540.     AL = 00h limit is 6 Mhz
  13541.        = 01h limit is 8 Mhz/6 Mhz
  13542. SeeAlso: AH=F0h,AH=F1h
  13543. ----------16F398-----------------------------
  13544. INT 16 U - NORTON GUIDES - INSTALLATION CHECK
  13545.     AX = F398h
  13546. Return: AX = 6A73h ("js")
  13547.     BH = scan code of current hot key
  13548.     BL = ASCII code of current hot key
  13549. Note:    NG.EXE was written by John Socha
  13550. ----------16F400-----------------------------
  13551. INT 16 - Compaq Systempro - CACHE CONTROLLER STATUS
  13552.     AX = F400h
  13553. Return: AH = E2h
  13554.     AL = status
  13555.         00h not present
  13556.         01h enabled
  13557.         02h disabled
  13558. SeeAlso: AX=F401h,AX=F402h
  13559. ----------16F401-----------------------------
  13560. INT 16 - Compaq Systempro - ENABLE CACHE CONTROLLER
  13561.     AX = F401h
  13562. Return: AX = E201h
  13563. SeeAlso: AX=F400h,AX=F402h
  13564. ----------16F402-----------------------------
  13565. INT 16 - Compaq Systempro - DISABLE CACHE CONTROLLER
  13566.     AX = F402h
  13567. Return: AX = E202h
  13568. SeeAlso: AX=F400h,AX=F401h
  13569. ----------16FA00DX5945-----------------------
  13570. INT 16 U - PC Tools v8+ VSAFE, VWATCH - INSTALLATION CHECK???
  13571.     AX = FA00h
  13572.     DX = 5945h
  13573. Return: CF clear
  13574.     DI = 4559h
  13575.     BX = ??? (2F00h or FFFFh) (VSAFE only)
  13576. SeeAlso: INT 13/AH=FAh,INT 21/AH=FAh"VDEFEND",INT 2F/AX=6282h
  13577. ----------16FA01DX5945-----------------------
  13578. INT 16 U - PC Tools v8+ VSAFE, VWATCH - UNINSTALL
  13579.     AX = FA01h
  13580.     DX = 5945h
  13581. Return: CF clear if successful
  13582.     FI = 4559h
  13583. SeeAlso: AX=FA00h
  13584. ----------16FA02DX5945-----------------------
  13585. INT 16 U - PC Tools v8+ VSAFE, VWATCH - ???
  13586.     AX = FA02h
  13587.     DX = 5945h
  13588.     BL = ???
  13589. Return: CF clear
  13590.     DI = 4559h
  13591.     CL = old value of ???
  13592. ----------16FA03DX5945-----------------------
  13593. INT 16 U - PC Tools v8+ VSAFE, VWATCH - ???
  13594.     AX = FA03h
  13595.     DX = 5945h
  13596. Return: CF clear
  13597.     DI = 4559h
  13598.     AX = 0002h
  13599. ----------16FA04DX5945-----------------------
  13600. INT 16 U - PC Tools v8+ VSAFE - GET ???
  13601.     AX = FA04h
  13602.     DX = 5945h
  13603. Return: CF clear
  13604.     DI = 4559h
  13605.     BL = ???
  13606. Note:    this function is a NOP under VWATCH
  13607. SeeAlso: AX=FA05h
  13608. ----------16FA05DX5945-----------------------
  13609. INT 16 U - PC Tools v8+ VSAFE - SET ???
  13610.     AX = FA05h
  13611.     DX = 5945h
  13612.     BL = ???
  13613. Return: CF clear
  13614.     DI = 4559h
  13615. Note:    this function is a NOP under VWATCH
  13616. SeeAlso: AX=FA04h
  13617. ----------16FA06DX5945-----------------------
  13618. INT 16 U - PC Tools v8+ VSAFE, VWATCH - GET ???
  13619.     AX = FA06h
  13620.     DX = 5945h
  13621. Return: CF clear
  13622.     DI = 4559h
  13623.     BL = ???
  13624. SeeAlso: AX=FA07h
  13625. ----------16FA07DX5945-----------------------
  13626. INT 16 U - PC Tools v8+ VSAFE, VWATCH - SET ???
  13627.     AX = FA07h
  13628.     DX = 5945h
  13629.     BL = ???
  13630. Return: CF clear
  13631.     DI = 4559h
  13632. SeeAlso: AX=FA00h,AX=FA06h
  13633. ----------16FE55-----------------------------
  13634. INT 16 U - PC Tools v8+ DATAMON, DRIVEMAP, CPSCHED, CPTASK - ???
  13635.     AX = FE55h
  13636.     CX = ???
  13637.     DX = ???
  13638.     ???
  13639. Return: DX:AX -> ???
  13640. ----------16FEA4-----------------------------
  13641. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - ???
  13642.     AX = FEA4h
  13643.     ???
  13644. Return: ???
  13645. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  13646.       code in DESKTOP
  13647. SeeAlso: AX=FFA4h
  13648. ----------16FEC6-----------------------------
  13649. INT 16 U - PC Tools v7+ CPSCHED - ???
  13650.     AX = FEC6h
  13651.     DL = ???
  13652.     ???
  13653. Return: ???
  13654. ----------16FED3-----------------------------
  13655. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - ???
  13656.     AX = FED3h
  13657.     DS:SI -> 92-byte data record for ???
  13658. Return: ???
  13659. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  13660.       code in DESKTOP
  13661. SeeAlso: AX=FFD3h
  13662. ----------16FEDC-----------------------------
  13663. INT 16 U - PC Tools v7+ CPSCHED - ???
  13664.     AX = FEDCh
  13665.     ???
  13666. Return: ???
  13667. ----------16FEEFCX0000-----------------------
  13668. INT 16 U - PC Tools v7+ CPSCHED/DESKTOP - INSTALLATION CHECK
  13669.     AX = FEEFh
  13670.     CX = 0000h
  13671. Return: CX = ABCDh if PC Tools scheduler (CPSCHED or DESKTOP) installed
  13672.         BX = segment of resident portion
  13673. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  13674.       code in DESKTOP
  13675. SeeAlso: AX=FFEFh
  13676. ----------16FEF1-----------------------------
  13677. INT 16 U - PC Tools v7 only CPSCHED/DESKTOP - ALTERNATE INSTALLATION CHECK
  13678.     AX = FEF1h
  13679.     BX = ???
  13680. Return: CX = 5555h if PC Tools scheduler (CPSCHED or DESKTOP) installed
  13681.     DX = 5555h
  13682. Note:    this function is identical to AX=FFD3h, and is implemented by the same
  13683.       code in DESKTOP
  13684. SeeAlso: AX=FFF1h
  13685. ----------16FF-------------------------------
  13686. INT 16 - KEYBOARD - KBUF extensions - ADD KEY TO TAIL OF KEYBOARD BUFFER
  13687.     AH = FFh
  13688.     DX = scan code
  13689. Return: AL = status
  13690.         00h success
  13691.         01h failure
  13692. Note:    KBUF is a keyboard buffer expander by Mark Adler
  13693. SeeAlso: AH=05h
  13694. ----------16FF-------------------------------
  13695. INT 16 - OPTIMA 1024 VGA-Sync - QUERY ZOOM INTERRUPT
  13696.     AH = FFh
  13697. Return: AL = interrupt number to which BIOS keyboard handler has been relocated
  13698.     AL+1 = Zoom interrupt number
  13699.     BX = hotkey
  13700. Note:    The default interrupts are 60h for keyboard and 61h for Zoom interrupt;
  13701.       the default hot key is F10
  13702. SeeAlso: INT 60"OPTIMA"
  13703. ----------16FF70-----------------------------
  13704. INT 16 U - PC Tools v8+ DRIVEMAP - API???
  13705.     AX = FF70h
  13706.     BX = function (0000h-0002h)
  13707.     ???
  13708. Return: ???
  13709. BUG:    this call will branch to random locations on BX=0003h-5CD6h under v8.0
  13710.       due to range-testing the wrong register
  13711. SeeAlso: INT 2F/AH=92h"DRIVEMAP"
  13712. ----------16FF80-----------------------------
  13713. INT 16 U - PC Tools v8+ CPTASK - API
  13714.     AX = FF80h
  13715.     BX = function (0000h-0009h or 4350h ['CP'])
  13716.     ???
  13717. Return: ???
  13718. ----------16FF90-----------------------------
  13719. INT 16 U - PC Tools v8+ DESKTOP - ???
  13720.     AX = FF90h
  13721.     ???
  13722. Return: ???
  13723. Note:    available only when popped up
  13724. ----------16FF91-----------------------------
  13725. INT 16 U - PC Tools v7+ DESKTOP - ???
  13726.     AX = FF91h
  13727.     ???
  13728. Return: AX = 0000h
  13729. Note:    calls AX=FFFDh after ???
  13730. SeeAlso: AX=FF92h,AX=FFFDh
  13731. ----------16FF92-----------------------------
  13732. INT 16 U - PC Tools v7+ DESKTOP - ???
  13733.     AX = FF92h
  13734.     ???
  13735. Return: AX = 0000h
  13736. Note:    like AX=FF91h, but temporarily sets ??? to 3
  13737. SeeAlso: AX=FF91h,AX=FF92h
  13738. ----------16FF93-----------------------------
  13739. INT 16 U - PC Tools v7+ DESKTOP - SET ??? FLAG
  13740.     AX = FF93h
  13741. ----------16FF94-----------------------------
  13742. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  13743.     AX = FF94h
  13744.     CX = ??? (default 0017h)
  13745. ----------16FF95-----------------------------
  13746. INT 16 U - PC Tools v7+ DESKTOP - SET ???
  13747.     AX = FF95h
  13748.     BX = ???
  13749. ----------16FF96-----------------------------
  13750. INT 16 U - PC Tools v7+ DESKTOP - ???
  13751.     AX = FF96h
  13752.     CL = ???
  13753. Return: AX = ???
  13754. ----------16FF97-----------------------------
  13755. INT 16 U - PC Tools v7+ DESKTOP - ???
  13756.     AX = FF97h
  13757.     DS:DX -> buffer for ??? (see below)
  13758. Return: ???
  13759.  
  13760. Format of buffer:
  13761. Offset    Size    Description
  13762.  00h 48 BYTEs    ???
  13763.  30h 128 BYTEs    ???
  13764. ----------16FF98-----------------------------
  13765. INT 16 U - PC Tools v7+ DESKTOP - OPEN \DESK.OVL FILE AND SEEK TO OVERLAY
  13766.     AX = FF98h
  13767.     DX = byte offset in file of overlay header
  13768. Return: BX = file handle for DESK.OVL file
  13769. Desc:    open the DESK.OVL file, seek to the specified offset, read in the
  13770.       overlay header, and seek to the offset specified by the header
  13771.  
  13772. Format of overlay header:
  13773. Offset    Size    Description
  13774.  00h 12 BYTEs    NUL-padded ASCII overlay filename
  13775.  0Ch    DWORD    offset within DESK.OVL file of actual overlay
  13776. ----------16FF99-----------------------------
  13777. INT 16 U - PC Tools v7+ DESKTOP - ???
  13778.     AX = FF99h
  13779.     ???
  13780. Return: ???
  13781. ----------16FF9A-----------------------------
  13782. INT 16 U - PC Tools v7+ DESKTOP - GET NAME OF COLOR SCHEME
  13783.     AX = FF9Ah
  13784. Return: ES:BX -> name of current color scheme
  13785. Note:    available even if not popped up
  13786. ----------16FF9B-----------------------------
  13787. INT 16 U - PC Tools v7+ DESKTOP - UNUSED
  13788.     AX = FF9Bh
  13789. Return: ???
  13790. Note:    sounds triple-length beep
  13791. ----------16FF9C-----------------------------
  13792. INT 16 U - PC Tools v8+ CPTASK - ???
  13793.     AX = FF9Ch
  13794.     BL = ??? (00h,01h)
  13795.     ???
  13796. Return: ???
  13797. Note:    sounds triple-length beep
  13798. ----------16FF9D-----------------------------
  13799. INT 16 U - PC Tools v8+ CPTASK, VSAFE - ???
  13800.     AX = FF9Dh
  13801.     ES:BX -> ??? word
  13802. Return: ???
  13803. Note:    if ES is non-zero, the word pointed at by ES:BX determines whether the
  13804.       ??? flag is cleared (word = 0000h) or set (word is nonzero).    The
  13805.       flag is always cleared if ES=0000h.
  13806. ----------16FF9E-----------------------------
  13807. INT 16 U - PC Tools v7+ DESKTOP - ???
  13808.     AX = FF9Eh
  13809.     DL = ???
  13810.         bit 7: ???
  13811.         bits 6-0: function number??? (00h,01h,other)
  13812.     ???
  13813. Return: ???
  13814. ----------16FFA1-----------------------------
  13815. INT 16 U - PC Tools v7+ DESKTOP - ???
  13816.     AX = FFA1h
  13817.     ???
  13818. Return: ???
  13819. Note:    same as AX=FFA2h, except ??? set to FFh
  13820. SeeAlso: AX=FFA2h
  13821. ----------16FFA2-----------------------------
  13822. INT 16 U - PC Tools v7+ DESKTOP - ???
  13823.     AX = FFA2h
  13824.     ???
  13825. Return: ???
  13826. Note:    calls AX=FFC7h (remove window) and AX=FFFDh
  13827. SeeAlso: AX=FFA1h,AX=FFC7h,AX=FFFDh
  13828. ----------16FFA3BX0000-----------------------
  13829. INT 16 U - PC Tools v7+ DATAMON - INSTALLATION CHECK
  13830.     AX = FFA3h
  13831.     BX = 0000h
  13832.     CX = 0000h
  13833. Return: AX = segment of resident code
  13834.     BX = 5555h
  13835.     CX = 5555h
  13836. ----------16FFA3BX0001-----------------------
  13837. INT 16 U - PC Tools v7+ DATAMON - GET ???
  13838.     AX = FFA3h
  13839.     BX = 0001h
  13840.     CX = 0001h
  13841. Return: AX:BX -> ???
  13842.     CX = BX
  13843. ----------16FFA3BX0002-----------------------
  13844. INT 16 U - PC Tools v7+ DATAMON - GET ???
  13845.     AX = FFA3h
  13846.     BX = 0002h
  13847.     CX = 0002h
  13848. Return: AX = ??? (0 or 1)
  13849.     CX = BX = AX
  13850. ----------16FFA3BX0003-----------------------
  13851. INT 16 U - PC Tools v7+ DATAMON - GET ???
  13852.     AX = FFA3h
  13853.     BX = 0003h
  13854.     CX = 0003h
  13855. Return: AX = ??? (0 or 1)
  13856.     CX = BX = AX
  13857. ----------16FFA3BX0004-----------------------
  13858. INT 16 U - PC Tools v7+ DATAMON - SET ??? FLAG
  13859.     AX = FFA3h
  13860.     BX = 0004h
  13861.     CX = 0004h
  13862. SeeAlso: AX=FFA3h/BX=0005h
  13863. ----------16FFA3BX0005-----------------------
  13864. INT 16 U - PC Tools v7+ DATAMON - CLEAR ??? FLAG
  13865.     AX = FFA3h
  13866.     BX = 0005h
  13867.     CX = 0005h
  13868. SeeAlso: AX=FFA3h/BX=0004h
  13869. ----------16FFA3BX0006-----------------------
  13870. INT 16 U - PC Tools v7+ DATAMON - SET PSP SEGMENT ???
  13871.     AX = FFA3h
  13872.     BX = 0006h
  13873.     CX = 0006h
  13874.     DX = current PSP segment as known to DOS??? or 0000h
  13875. ----------16FFA4-----------------------------
  13876. INT 16 U - PC Tools v7+ DESKTOP - ???
  13877.     AX = FFA4h
  13878. Return: ???
  13879. Notes:    available even when not popped up
  13880.     sets unknown flag if ??? conditions met
  13881. SeeAlso: AX=FEA4h
  13882. ----------16FFA5CX1111-----------------------
  13883. INT 16 - PC-Cache v6+ - INSTALLATION CHECK
  13884.     AX = FFA5h
  13885.     CX = 1111h
  13886. Return: CH = 00h if installed
  13887.         ES:DI -> internal data (see below)
  13888.         CL = cache state
  13889.         01h enabled
  13890.         02h disabled
  13891. SeeAlso: INT 13/AH=A0h,INT 21/AH=2Bh/CX=4358h
  13892.  
  13893. Format of internal data:
  13894. Offset    Size    Description
  13895. -1Ch 20 BYTEs    cached drive list, one byte per drive A: to T:
  13896.         each byte is either blank (20h) or drive letter (41h-54h)
  13897.  -8    BYTE    ???
  13898.  -7    WORD    number of physical transfers (scaled down to 0000h-7FFFh)
  13899.  -5    WORD    number of saved transfers (scaled down to 0000h-7FFFh)
  13900.  -3   3 BYTEs    ???
  13901. ----------16FFA5CXAAAA-----------------------
  13902. INT 16 - PC-Cache v6+ - ENABLE DELAYED WRITES
  13903.     AX = FFA5h
  13904.     CX = AAAAh
  13905. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  13906. SeeAlso: AX=FFA5h/CX=CCCCh
  13907. ----------16FFA5CXCCCC-----------------------
  13908. INT 16 - PC-Cache v6+ - FLUSH CACHE AND DISABLE DELAYED WRITES
  13909.     AX = FFA5h
  13910.     CX = CCCCh
  13911. Return: AX = ??? (apparently either 0000h or sectors_in_cache - 5)
  13912. Note:    delayed writes are automatically disabled on EXECing
  13913.       (see INT 21/AH=4Bh) a program named either WIN.CO? or DV.E??;
  13914.       however, delayed writes are not automatically reenabled upon the
  13915.       program's termination in v6.
  13916. SeeAlso: AX=FFA5h/CX=AAAAh,AX=FFA5h/CX=FFFFh
  13917. ----------16FFA5CXDDDD-----------------------
  13918. INT 16 - PC-Cache v6+ - FLUSH AND DISABLE CACHE
  13919.     AX = FFA5h
  13920.     CX = DDDDh
  13921. SeeAlso: AX=FFA5h/CX=EEEEh,AX=FFA5h/CX=FFFFh
  13922. ----------16FFA5CXEEEE-----------------------
  13923. INT 16 - PC-Cache v6+ - ENABLE CACHE
  13924.     AX = FFA5h
  13925.     CX = EEEEh
  13926. SeeAlso: AX=FFA5h/CX=DDDDh
  13927. ----------16FFA5CXFFFF-----------------------
  13928. INT 16 - PC-Cache v6+ - FLUSH CACHE
  13929.     AX = FFA5h
  13930.     CX = FFFFh
  13931. SeeAlso: AX=FFA5h/CX=CCCCh,AX=FFA5h/CX=DDDDh,INT 13/AH=A1h
  13932. ----------16FFA6-----------------------------
  13933. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ???
  13934.     AX = FFA6h
  13935. Return: DS:SI -> ???
  13936. Note:    available only when popped up
  13937. ----------16FFA7-----------------------------
  13938. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ??? PATH
  13939.     AX = FFA7h
  13940. Return: DS:SI -> ASCIZ path (directory from which PCTools was run???)
  13941. ----------16FFA8-----------------------------
  13942. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  13943.     AX = FFA8h
  13944.     DS:SI -> three consecutive ASCIZ strings for ??? (max 256 bytes total)
  13945.     ???
  13946. Return: ???
  13947. Notes:    available only when popped up
  13948.     strings copied into internal buffer, among other actions
  13949. ----------16FFA9-----------------------------
  13950. INT 16 U - PC Tools v6.0+ DESKTOP API - GET VERSION STRING
  13951.     AX = FFA9h
  13952. Return: DS:SI -> version string
  13953. ----------16FFAA-----------------------------
  13954. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  13955.     AX = FFAAh
  13956.     ???
  13957. Return: ???
  13958. Note:    available only when popped up
  13959. ----------16FFAB-----------------------------
  13960. INT 16 U - PC Tools v6.0+ DESKTOP API - GET EDITOR SETTINGS???
  13961.     AX = FFABh
  13962. Return: DS:SI -> editor setting strings???
  13963. ----------16FFAC-----------------------------
  13964. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  13965.     AX = FFACh
  13966.     DL = ???
  13967. Note:    available only when popped up
  13968. ----------16FFAD-----------------------------
  13969. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  13970.     AX = FFADh
  13971.     DL = ???
  13972. ----------16FFAE-----------------------------
  13973. INT 16 U - PC Tools v6.0+ DESKTOP API - GET ???
  13974.     AX = FFAEh
  13975. Return: AL = ???
  13976. ----------16FFAF-----------------------------
  13977. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  13978.     AX = FFAFh
  13979.     DL = ???
  13980. ----------16FFB0-----------------------------
  13981. INT 16 U - PC Tools v6.0+ DESKTOP API - SET ???
  13982.     AX = FFB0h
  13983.     BL = ???
  13984. ----------16FFB1-----------------------------
  13985. INT 16 U - PC Tools v6.0+ DESKTOP API - ???
  13986.     AX = FFB1h
  13987.     ???
  13988. Return: ???
  13989. ----------16FFB2-----------------------------
  13990. INT 16 U - PC Tools v5.5+ DESKTOP API - GET ???
  13991.     AX = FFB2h
  13992. Return: DS:SI -> ???
  13993. ----------16FFB3-----------------------------
  13994. INT 16 U - PC Tools v5.5+ DESKTOP API - ???
  13995.     AX = FFB3h
  13996.     ???
  13997. Return: ???
  13998. Note:    available only when popped up
  13999. ----------16FFB4-----------------------------
  14000. INT 16 U - PC Tools v5.5+ DESKTOP API - SET ??? FLAG
  14001.     AX = FFB4h
  14002. Note:    available only when popped up
  14003. SeeAlso: AX=FFBBh
  14004. ----------16FFB5-----------------------------
  14005. INT 16 U - PC Tools v5.5+ DESKTOP API - GET/SET WINDOW PARAMETERS
  14006.     AX = FFB5h
  14007.     BX = window specifier (000Fh to 0019h) (see below)
  14008.     DX = 0000h get, nonzero = set
  14009.     ES:DI -> window parameter buffer (see below)
  14010. SeeAlso: AX=FFCBh
  14011.  
  14012. Values for window specifier:
  14013.  000Fh    comm/FAX
  14014.  0014h    hotkey selection
  14015.  0015h    ASCII table
  14016.  0016h    system colors menu
  14017.  
  14018. Format of window parameters:
  14019. Offset    Size    Description
  14020.  00h    BYTE    rows in window, not counting frame
  14021.  01h    BYTE    columns in window, not counting frame
  14022.  02h    BYTE    row number of top of window
  14023.  03h    BYTE    2*column number of left of window
  14024.  04h    BYTE    character attribute for ???
  14025.  05h    BYTE    character attribute for background/border
  14026.  06h    BYTE    character attribute for ???
  14027.  07h    DWORD    pointer to ??? on screen
  14028.  0Bh  4 BYTEs    ???
  14029.  0Fh    BYTE    nonzero if window may be resized
  14030. Note:    if running in monochrome mode, character attributes at offsets 04h to
  14031.       06h are stored unchanged, but attributes other than 07h, 0Fh, or 70h
  14032.       are changed to 07h on reading
  14033. ----------16FFB6-----------------------------
  14034. INT 16 U - PC Tools v5.5+ DESKTOP API - GET ???
  14035.     AX = FFB6h
  14036. Return: AH = ???
  14037.     AL = ???
  14038. ----------16FFB7-----------------------------
  14039. INT 16 U - PC Tools v5.5+ DESKTOP API - GET/SET ???
  14040.     AX = FFB7h
  14041.     BX = direction
  14042.         0000h copy to buffer
  14043.         else  copy from buffer
  14044.     DS:SI -> 70-byte buffer with ???
  14045. Return: data copied
  14046. Note:    available only when popped up under v6.0+
  14047. ----------16FFB8-----------------------------
  14048. INT 16 U - PC Tools v5.1+ DESKTOP API - GET/SET???
  14049.     AX = FFB8h
  14050.     BH = subfunction
  14051.         00h get
  14052.         Return: BL = old value of ???
  14053.             CL = old value of ??? (v6.0+)
  14054.             CH = old value of ??? (v6.0+)
  14055.         nonzero set
  14056.         BL = new value for ???
  14057.         CL = new value for ??? (v6.0+)
  14058.         CH = new value for ??? (v6.0+)
  14059.         DH = ???
  14060.         Return: AL = old value replaced by CL (v6.0+)
  14061.             AH = old value replaced by CH (v6.0+)
  14062. ----------16FFB9-----------------------------
  14063. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14064.     AX = FFB9h
  14065.     ???
  14066. Return: AX = ???
  14067.     CX = ???
  14068.     DS:SI -> ???
  14069.     ES:DI -> ???
  14070. ----------16FFBA-----------------------------
  14071. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14072.     AX = FFBAh
  14073.     ???
  14074. Return: AX = ???
  14075. Note:    available only when popped up
  14076. ----------16FFBB-----------------------------
  14077. INT 16 U - PC Tools v5.1+ DESKTOP API - CLEAR ??? FLAG
  14078.     AX = FFBBh
  14079. Note:    available only when popped up
  14080. SeeAlso: AX=FFB4h
  14081. ----------16FFBC-----------------------------
  14082. INT 16 U - PC Tools v5.1+ DESKTOP API - RESTORE ORIGINAL SCREEN???
  14083.     AX = FFBCh
  14084. ----------16FFBD-----------------------------
  14085. INT 16 U - PC Tools v5.1+ DESKTOP API - ??? DATABASE INDEXING MESSAGES
  14086.     AX = FFBDh
  14087.     ???
  14088. Return: ???
  14089. ----------16FFBE-----------------------------
  14090. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14091.     AX = FFBEh
  14092.     ???
  14093. Return: ???
  14094. Note:    available only when popped up
  14095. ----------16FFBF-----------------------------
  14096. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14097.     AX = FFBFh
  14098.     BX = DOS file handle to write on
  14099.     ???
  14100. Return: ???
  14101. Note:    available only when popped up
  14102. ----------16FFC0-----------------------------
  14103. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14104.     AX = FFC0h
  14105.     ???
  14106. Return: AX = 0000h if successful
  14107.     AX = FFFFh on error
  14108. Note:    available only when popped up
  14109. ----------16FFC1-----------------------------
  14110. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14111.     AX = FFC1h
  14112.     BL = ???
  14113.     ES:DI -> data structure (see below)
  14114.     ???
  14115. Return: AX = ???
  14116. Note:    available only when popped up
  14117. SeeAlso: AX=FFC2h,AX=FFC3h
  14118.  
  14119. Format of data structure:
  14120. Offset    Size    Description
  14121.  00h    WORD    ???
  14122.  02h    WORD    ???
  14123.  04h    WORD    ???
  14124.  06h    WORD    ???
  14125.  08h    WORD    ???
  14126.  0Ah    BYTE    ???
  14127.  0Bh    BYTE    ??? (zero/nonzero)
  14128. ---v7.1---
  14129.  0Ch    WORD    ???
  14130.  0Eh    BYTE    ???
  14131.  0Fh    WORD    ???
  14132.  11h    WORD    ???
  14133.     ???
  14134. ----------16FFC2-----------------------------
  14135. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14136.     AX = FFC2h
  14137.     BL = ???
  14138.     ES:DI -> data structure (see AX=FFC1h)
  14139.     ???
  14140. Return: AH = ???
  14141.     CX = ???
  14142.     DH = ???
  14143.     DL = ???
  14144. Note:    available only when popped up
  14145. SeeAlso: AX=FFC1h,AX=FFC3h
  14146. ----------16FFC3-----------------------------
  14147. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14148.     AX = FFC3h
  14149.     BL = ???
  14150.     ES:DI -> data structure (see AX=FFC1h)
  14151.     ???
  14152. Return: AH = ???
  14153.     CX = ???
  14154.     DH = ???
  14155.     DL = ???
  14156. Note:    available only when popped up
  14157. SeeAlso: AX=FFC1h,AX=FFC2h
  14158. ----------16FFC4-----------------------------
  14159. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  14160.     AX = FFC4h
  14161. Return: AL = ???
  14162.     BX = segment of scratch space???
  14163.     CX = segment of stored screen data (section covered by window???)
  14164.     DX = segment of window parameters for ???
  14165.     ES:BP -> ???
  14166. Note:    available only when popped up in versions prior to 6.0
  14167. ----------16FFC5-----------------------------
  14168. INT 16 U - PC Tools v5.1+ DESKTOP API - CHECK WHETHER DESKTOP LOADED RESIDENT
  14169.     AX = FFC5h
  14170. Return: BL = nonzero if loaded resident
  14171.        = 00h if nonresident
  14172. Note:    available only when popped up; should call AX=FFEFh first to ensure
  14173.       that DESKTOP is active
  14174. SeeAlso: AX=FFEFh,AX=FFF3h
  14175. ----------16FFC6-----------------------------
  14176. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  14177.     AX = FFC6h
  14178.     BL = new value for ???
  14179. ----------16FFC7-----------------------------
  14180. INT 16 U - PC Tools v5.1+ DESKTOP API - REMOVE WINDOW
  14181.     AX = FFC7h
  14182.     ???
  14183. Return: ???
  14184. ----------16FFC8-----------------------------
  14185. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  14186.     AX = FFC8h
  14187. Return: DS:SI -> ???
  14188. Note:    valid only while popped up
  14189. ----------16FFC9-----------------------------
  14190. INT 16 U - PC Tools v5.1+ DESKTOP API - COPY DATA TO CLIPBOARD
  14191.     AX = FFC9h
  14192.     DS:SI -> characters to store in clipboard
  14193.     CX = size in bytes
  14194. Return: CF set on error
  14195. Notes:    available only when popped up
  14196.     while copying, bytes of 00h and 0Ah are skipped
  14197. ----------16FFCA-----------------------------
  14198. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  14199.     AX = FFCAh
  14200.     DX = ???
  14201. Return: AX destroyed
  14202. Note:    available only when popped up
  14203. ----------16FFCB-----------------------------
  14204. INT 16 U - PC Tools v5.1+ DESKTOP API - SELECT WINDOW PARAMETERS???
  14205.     AX = FFCBh
  14206.     DX = window specifier???
  14207. Return: AX destroyed
  14208. Note:    available only when popped up
  14209. SeeAlso: AX=FFB5h
  14210. ----------16FFCC-----------------------------
  14211. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY ASCIZ STRING CENTERED IN WINDOW
  14212.     AX = FFCCh
  14213.     DS:SI -> ASCIZ string
  14214. Return: AX = ???
  14215.     CX = ???
  14216.     ES:DI -> address past last character displayed (v5.1/5.5)
  14217.           -> ??? on menu bar (v6.0)
  14218. ----------16FFCD-----------------------------
  14219. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14220.     AX = FFCDh
  14221.     DS:DX -> ???
  14222. Return: ???
  14223. Note:    available only when popped up
  14224. ----------16FFCE-----------------------------
  14225. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ??? DELAYS
  14226.     AX = FFCEh
  14227.     CX = ???
  14228. Return: nothing???
  14229. ----------16FFCF-----------------------------
  14230. INT 16 U - PC Tools v5.1+ DESKTOP API - CLOSE PRINTER/PRINT FILE
  14231.     AX = FFCFh
  14232. Note:    available only when popped up
  14233. ----------16FFD0-----------------------------
  14234. INT 16 U - PC Tools v5.1+ DESKTOP API - PREPARE TO PRINT???
  14235.     AX = FFD0h
  14236.     ???
  14237. Return: ???
  14238. Note:    available only when popped up
  14239. ----------16FFD1-----------------------------
  14240. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY PRINT OPTIONS MENU
  14241.     AX = FFD1h
  14242. Return: BX = number of copies
  14243.     DX = destination
  14244.         00h cancel
  14245.         01h LPT1
  14246.         02h LPT2
  14247.         03h    LPT3
  14248.         04h    COM1
  14249.         05h    COM2
  14250.         06h disk file
  14251. Note:    available only when popped up
  14252. ----------16FFD2-----------------------------
  14253. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14254.     AX = FFD2h
  14255.     BX = ???
  14256. Return: BL = ???
  14257. Note:    available only when popped up
  14258. ----------16FFD3-----------------------------
  14259. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14260.     AX = FFD3h
  14261.     DS:SI -> 92-byte data record for ???
  14262. Return: ???
  14263. SeeAlso: AX=FED3h
  14264. ----------16FFD4BH3C-------------------------
  14265. INT 16 U - PC Tools v5.1+ DESKTOP API - CREATE/OPEN/DELETE FILE
  14266.     AX = FFD4h
  14267.     BH = 3Ch create file (with no attributes)
  14268.          3Dh open file
  14269.          41h delete file
  14270.     BL = access mode
  14271.          00h read only
  14272.          01h write only
  14273.          02h read/write
  14274.     DS:SI -> ASCIZ filename
  14275. Return: BX = file handle
  14276.         0000h on error
  14277. Note:    operation is attempted in (in order) the directory from which the
  14278.       desktop was started/run???, the directory specified with the
  14279.       filename, X:\PCTOOLS\, and X:\
  14280. ----------16FFD5-----------------------------
  14281. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14282.     AX = FFD5h
  14283.     ???
  14284. Return: ???
  14285. Note:    available only when popped up
  14286. ----------16FFD6-----------------------------
  14287. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14288.     AX = FFD6h
  14289.     BX = ???
  14290.     CX = ???
  14291.     DX = offset in ???
  14292.     ???
  14293. Return: ???
  14294. Note:    available only when popped up
  14295. ----------16FFD7-----------------------------
  14296. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14297.     AX = FFD7h
  14298.     ???
  14299. Return: BL = ???
  14300. Note:    available only when popped up
  14301. ----------16FFD8-----------------------------
  14302. INT 16 U - PC Tools v5.1+ DESKTOP API - SAFE CREATE FILE
  14303.     AX = FFD8h
  14304.     DS:BX -> ASCIZ filename
  14305. Return: BX = file handle
  14306.         0000h on error
  14307. Note:    pops up confirmation menu if file already exists
  14308.     only available when popped up???
  14309. ----------16FFD9-----------------------------
  14310. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  14311.     AX = FFD9h
  14312. Return: AX = ???
  14313. Note:    available only when popped up
  14314. ----------16FFDA-----------------------------
  14315. INT 16 U - PC Tools v5.1+ DESKTOP API - GET NAME OF LAST FILE OPENED
  14316.     AX = FFDAh
  14317.     DS:SI -> ??? (v5.1/5.5 only)
  14318. Return: DS:SI -> filename
  14319. ----------16FFDB-----------------------------
  14320. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  14321.     AX = FFDBh
  14322.     BL = ???
  14323. Note:    available only when popped up
  14324. ----------16FFDC-----------------------------
  14325. INT 16 U - PC Tools v5.1+ DESKTOP API - UNHOOK
  14326.     AX = FFDCh
  14327. Return: interrupt vectors 09h, 10h (v6.0+), 16h, 1Ch, and 21h restored to
  14328.       original values
  14329. ----------16FFDDBX0000-----------------------
  14330. INT 16 U - PC Tools v5.1+ PCShell API - INSTALLATION CHECK
  14331.     AX = FFDDh
  14332.     BX = 0000h
  14333. Return: CX = 5555h 
  14334.     DX = 5555h if PCShell installed in resident mode
  14335. ----------16FFDDBX0001-----------------------
  14336. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  14337.     AX = FFDDh
  14338.     BX = 0001h
  14339. Return: CF clear if request successful (PCShell will pop up)
  14340.     CF set on error
  14341. SeeAlso: AX=FFDDh/BX=0003h
  14342. ----------16FFDDBX0002-----------------------
  14343. INT 16 U - PC Tools v5.1-5.5 PCShell API - GET ???
  14344.     AX = FFDDh
  14345.     BX = 0002h
  14346. Return: AL = 
  14347.         00h ???
  14348.         01h ???
  14349. Note:    PCShell v6.0+ displays the error message "Incorrect PCRUN version",
  14350.       awaits a keystroke, and aborts the current process
  14351. ----------16FFDDBX0003-----------------------
  14352. INT 16 U - PC Tools v5.1+ PCShell API - REQUEST POP-UP
  14353.     AX = FFDDh
  14354.     BX = 0003h
  14355. SeeAlso: AX=FFDDh/BX=0001h
  14356. ----------16FFDDBX0004-----------------------
  14357. INT 16 U - PC Tools v5.1+ PCShell API - GET ???
  14358.     AX = FFDDh
  14359.     BX = 0004h
  14360. Return: CF clear if successful
  14361.         DS:SI -> ???
  14362. ----------16FFDDBX0005-----------------------
  14363. INT 16 U - PC Tools v5.1+ PCShell API - ???
  14364.     AX = FFDDh
  14365.     BX = 0005h
  14366.     ???
  14367. Return: ???
  14368. Note:    resets various variables if certain conditions are met
  14369. ----------16FFDDBX0006-----------------------
  14370. INT 16 U - PC Tools v5.1+ PCShell API - ???
  14371.     AX = FFDDh
  14372.     BX = 0006h
  14373.     ???
  14374. Return: ???
  14375. Note:    resets various variables if certain conditions are met
  14376. ----------16FFDDBX0007-----------------------
  14377. INT 16 U - PC Tools v5.1+ PCShell API - SET ??? FLAG
  14378.     AX = FFDDh
  14379.     BX = 0007h
  14380. Return: CF clear if successful
  14381. SeeAlso: AX=FFDDh/BX=0008h
  14382. ----------16FFDDBX0008-----------------------
  14383. INT 16 U - PC Tools v5.1+ PCShell API - CLEAR ??? FLAG
  14384.     AX = FFDDh
  14385.     BX = 0008h
  14386. Return: CF undefined
  14387. SeeAlso: AX=FFDDh/BX=0007h
  14388. ----------16FFDDBX0009-----------------------
  14389. INT 16 U - PC Tools v6.0+ PCShell API - GET PCRUN PARAMETERS
  14390.     AX = FFDDh
  14391.     BX = 0009h
  14392. Return: CF clear if successful
  14393.         DS:SI -> list of pointers (see below)
  14394.  
  14395. Format of returned pointer list:
  14396. Offset    Size    Description
  14397.  00h    WORD    offset of WORD containing ???
  14398.  02h    WORD    offset of name of program to execute
  14399.  04h    WORD    offset of 80-byte buffer for ???
  14400.  06h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  14401.  08h    WORD    offset of buffer for ??? (length in WORD preceding buffer)
  14402. ----------16FFDDBX000A-----------------------
  14403. INT 16 U - PC Tools v6.0+ PCRUN API - INSTALLATION CHECK
  14404.     AX = FFDDh
  14405.     BX = 000Ah
  14406. Return: CX = 5555h if running
  14407.     DX = 5555h
  14408. Note:    also sets a flag
  14409. ----------16FFDDBX000B-----------------------
  14410. INT 16 U - PC Tools v6.0+ PCRUN API - ???
  14411.     AX = FFDDh
  14412.     BX = 000Bh
  14413.     ???
  14414. Return: CX = 5555h if PCRUN active
  14415.     DX = 5555h
  14416. Note:    also clears flag set by AX=FFDDh/BX=000Ah
  14417. ----------16FFDE-----------------------------
  14418. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY POPUP MENU
  14419.     AX = FFDEh
  14420.     DS:DX -> menu description (must be on a paragraph boundary)
  14421. Return: AX = ???
  14422.         AL seems to be the number of the selected button
  14423. Note:    available only when popped up
  14424. SeeAlso: AX=FFEEh
  14425. ----------16FFDF-----------------------------
  14426. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14427.     AX = FFDFh
  14428.     ???
  14429. Return: ???
  14430. ----------16FFE0-----------------------------
  14431. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14432.     AX = FFE0h
  14433.     CX = ???
  14434.     DX = ???
  14435. Note:    available only when popped up
  14436. ----------16FFE1-----------------------------
  14437. INT 16 U - PC Tools v5.1+ DESKTOP API - BEEP
  14438.     AX = FFE1h
  14439. ----------16FFE2-----------------------------
  14440. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14441.     AX = FFE2h
  14442.     DX = ???
  14443. Return: ???
  14444. Note:    available only when popped up
  14445. ----------16FFE3-----------------------------
  14446. INT 16 U - PC Tools v5.1+ DESKTOP API - PRINT CHARACTER
  14447.     AX = FFE3h
  14448.     BL = character to print to currently open printer or print file
  14449. Return: CF set on error
  14450. Note:    available only when popped up
  14451. SeeAlso: INT 17/AH=00h
  14452. ----------16FFE4-----------------------------
  14453. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14454.     AX = FFE4h
  14455.     DX = segment of ???
  14456. Return: ???
  14457. Note:    available only when popped up
  14458. ----------16FFE5-----------------------------
  14459. INT 16 U - PC Tools v5.1+ DESKTOP API - POP UP FILE SELECTION MENU
  14460.     AX = FFE5h
  14461.     DS:SI -> ASCIZ wildcard filespec followed by ASCIZ menu title
  14462.     DX = segment of window parameters???
  14463. Return: AX = DOS file handle for file
  14464.         DS:DX -> filename???
  14465.        = FFFFh if cancelled by user
  14466. Note:    available only when popped up
  14467. SeeAlso: AX=FFDAh
  14468. ----------16FFE6-----------------------------
  14469. INT 16 U - PC Tools v5.1+ DESKTOP API - CHECK FOR AND GET KEYSTROKE
  14470.     AX = FFE6h
  14471. Return: AX = 0000h if no key available
  14472.          else  BIOS keycode
  14473. Notes:    available only when popped up
  14474.     invokes INT 28 idle interrupt before checking for key
  14475. ----------16FFE7-----------------------------
  14476. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14477.     AX = FFE7h
  14478.     BX = segment of ???
  14479. Return: ???
  14480. Note:    available only when popped up
  14481. ----------16FFE8-----------------------------
  14482. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY NUMBER
  14483.     AX = FFE8h
  14484.     CX = number
  14485.     DH = attribute
  14486.     DS:SI -> destination for ASCII number
  14487. Return: DS:SI buffer filled in with alternating characters and attributes
  14488. ----------16FFE9-----------------------------
  14489. INT 16 U - PC Tools v5.1+ DESKTOP API - GET FILE LIST???
  14490.     AX = FFE9h
  14491. Return: BX = segment of file/directory list (14 bytes per file, NUL-padded)
  14492. Note:    available only when popped up
  14493. ----------16FFEA-----------------------------
  14494. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY COUNTED STRING
  14495.     AX = FFEAh
  14496.     DS:SI -> counted string (count byte followed by string)
  14497. Return: ???
  14498. Note:    available only when popped up
  14499. ----------16FFEB-----------------------------
  14500. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14501.     AX = FFEBh
  14502.     ???
  14503. Return: ???
  14504. ----------16FFEC-----------------------------
  14505. INT 16 U - PC Tools v5.1+ DESKTOP API - GET KEY
  14506.     AX = FFECh
  14507.     DS:SI -> FAR routine to ???
  14508.     BX = ???
  14509.     ???
  14510. Return: AX = keystroke
  14511.         FFFFh if F10 pressed to go to menu
  14512. Notes:    available only when popped up
  14513.     invokes INT 28 while waiting for keystroke
  14514.     F10 is hotkey to Desktop menu
  14515. ----------16FFED-----------------------------
  14516. INT 16 U - PC Tools v5.1+ DESKTOP API - GET ???
  14517.     AX = FFEDh
  14518. Return: AX = ???
  14519. Note:    available only when popped up
  14520. ----------16FFEE-----------------------------
  14521. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE PULLDOWN MENUS
  14522.     AX = FFEEh
  14523.     DS:SI -> pulldown menu system description (see below)
  14524. Return: AX destroyed
  14525. Notes:    available only when popped up
  14526.     if the accessory does not need any menu items of its own, it should
  14527.       call AX=FFFAh instead
  14528. SeeAlso: AX=FFF7h,AX=FFFAh
  14529.  
  14530. Format of pulldown menu system description:
  14531. Offset    Size    Description
  14532.  00h    WORD    offset of menu bar contents (counted string)
  14533.  02h    WORD    number of items on menu bar
  14534.  04h 10 BYTEs    scan codes for hotkeying to each of up to ten menu items
  14535.  0Eh 10    BYTEs    which character to highlight in each menu item (01h=first)
  14536.  18h    WORD    offset of first menu definition (see below)
  14537.  1Ah    WORD    offset of second menu definition
  14538.     ...
  14539.  
  14540. Format of menu definition:
  14541. Offset    Size    Description
  14542.  00h    WORD    offset of menu contents (see below)
  14543.  02h    WORD    number of entries in menu
  14544.  04h    for each entry:
  14545.         Offset    Size    Description
  14546.          00h    BYTE    scancode of Alt-key to invoke entry
  14547.          01h    BYTE    character to highlight (01h=first, etc)
  14548.          02h    WORD    offset of FAR routine to handle selection
  14549.  
  14550. Format of menu contents:
  14551. Offset    Size    Description
  14552.  00h    BYTE    number of lines in menu
  14553.  01h    BYTE    width of menu
  14554.  02h  N BYTEs    counted strings, one for each line in menu
  14555. ----------16FFEFCX0000-----------------------
  14556. INT 16 U - PC Tools v5.1+ DESKTOP API - INSTALLATION CHECK
  14557.     AX = FFEFh
  14558.     CX = 0000h
  14559. Return: CX = ABCDh if PC Tools DESKTOP.EXE installed
  14560.         BX = segment of resident portion
  14561.         AX = ??? (v5.1/5.5 only)
  14562. SeeAlso: AX=FEEFh,AX=FFC5h,AX=FFF3h
  14563. ----------16FFF0-----------------------------
  14564. INT 16 U - PC Tools v5.1+ DESKTOP API - SET ???
  14565.     AX = FFF0h
  14566.     DX = ???
  14567. Return: AX destroyed
  14568. Note:    available only when popped up
  14569. ----------16FFF1BX0000-----------------------
  14570. INT 16 U - PC Tools v5.1+ DESKTOP API - ALTERNATE INSTALLATION CHECK
  14571.     AX = FFF1h
  14572.     BX = 0000h  leave ??? flag as is
  14573.         nonzero set ??? flag
  14574. Return: CX = 5555h if installed
  14575.     DX = 5555h
  14576. ----------16FFF2-----------------------------
  14577. INT 16 U - PC Tools v5.1+ DESKTOP API - DISPLAY HELP LINE
  14578.     AX = FFF2h
  14579.     DS:SI -> ASCIZ function key label string (each label preceded by '[')
  14580.         or help text
  14581. Return: AX destroyed
  14582. Notes:    available only when popped up
  14583.     if the specified string does not start with '[', it is displayed
  14584.       centered on the bottom line, else the function key labels are shown
  14585. ----------16FFF3-----------------------------
  14586. INT 16 U - PC Tools v5.1+ DESKTOP API - PREPARE TO UNLOAD RESIDENT DESKTOP
  14587.     AX = FFF3h
  14588. Note:    releases any EMS being used; restores video mode, page, and cursor
  14589.       shape; and restores interrupt vectors
  14590. SeeAlso: AX=FFC5h,AX=FFEFh
  14591. ----------16FFF4-----------------------------
  14592. INT 16 U - PC Tools v5.1+ DESKTOP API - ???
  14593.     AX = FFF4h
  14594.     ???
  14595. Return: ???
  14596. Note:    available only when popped up
  14597. SeeAlso: AX=FFF6h
  14598. ----------16FFF5-----------------------------
  14599. INT 16 U - PC Tools v5.1+ DESKTOP API - GET SCREEN ATTRIBUTE ARRAY
  14600.     AX = FFF5h
  14601. Return: ES:BX -> screen attributes data structure (see below)
  14602.     AL = ??? (v6.0+)
  14603.  
  14604. Format of attribute data structure:
  14605. Offset    Size    Description
  14606.  -1    BYTE    attribute for desktop background
  14607.  00h    BYTE    attribute for normal characters on desktop menu
  14608.  01h    BYTE    attribute for highlighted characters on desktop menu
  14609.  02h  5    BYTEs    ???
  14610.  07h    BYTE    attribute for dialog boxes
  14611.  08h 15 BYTEs    ???
  14612.  17h    BYTE    attribute for message boxes
  14613. ----------16FFF6-----------------------------
  14614. INT 16 U - PC Tools v5.1+ DESKTOP API - INVOKE NOTEPAD EDITOR
  14615.     AX = FFF6h
  14616.     DS = segment of editor buffer structure (see below)
  14617.     BX = ???
  14618.     DX = segment of window parameters structure (see AX=FFB5h)
  14619. Return: ???
  14620. Note:    available only when popped up
  14621. SeeAlso: AX=FFF4h
  14622.  
  14623. Format of editor buffer structure:
  14624. Offset    Size    Description
  14625.  00h    WORD    offset of current cursor position in buffer segment
  14626.  02h  2 BYTEs    ???
  14627.  04h    WORD    offset of beginning of file data in buffer segment
  14628.  06h 10 BYTEs    ???
  14629.  10h  N BYTEs    ASCIZ name of file being edited
  14630. ----------16FFF7-----------------------------
  14631. INT 16 U - PC Tools v5.1+ DESKTOP API - PROCESS MENU BAR ENTRY???
  14632.     AX = FFF7h
  14633.     DS:SI -> ???
  14634.     ???
  14635. Return: ???
  14636. Notes:    available only when popped up
  14637.     performs input processing on the menu bar set up with AX=FFEEh
  14638. SeeAlso: AX=FFEEh,AX=FFFBh
  14639. ----------16FFF8-----------------------------
  14640. INT 16 U - PC Tools v5.1+ DESKTOP API - DRAW EMPTY WINDOW
  14641.     AX = FFF8h
  14642.     DS:0000h -> window parameters structure (see AX=FFB5h)
  14643.     DS:BX -> DWORD to store address of ??? on screen
  14644. Return: ???
  14645. ----------16FFF9-----------------------------
  14646. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE SCREEN REFRESH ROUTINE
  14647.     AX = FFF9h
  14648.     ES:BX -> FAR routine to redisplay the utility's window
  14649. Note:    available only when popped up
  14650. ----------16FFFA-----------------------------
  14651. INT 16 U - PC Tools v5.1+ DESKTOP API - DEFINE STANDARD PULLDOWN MENUS
  14652.     AX = FFFAh
  14653. Notes:    available only when popped up
  14654.     adds the "Window" option to the "Desktop" option which is the only one
  14655.       available when no accessories are active.  Unlike AX=FFEEh, no
  14656.       additional menu items are added between "Desktop" and "Window"
  14657. SeeAlso: AX=FFEEh,AX=FFFBh
  14658. ----------16FFFB-----------------------------
  14659. INT 16 U - PC Tools v5.1+ DESKTOP API - PROCESS STANDARD MENU BAR
  14660.     AX = FFFBh
  14661. Return: ???
  14662. Notes:    available only when popped up
  14663.     performs input processing on the standard menu bar set up with AX=FFFAh
  14664. SeeAlso: AX=FFF7h
  14665. ----------16FFFC-----------------------------
  14666. INT 16 U - PC Tools v5.1+ DESKTOP API - GET HOTKEYS AND KEYBOARD VECTOR
  14667.     AX = FFFCh
  14668. Return: ES:BX -> hotkey table (see below)
  14669.     DS:DX = original INT 9 vector
  14670.  
  14671. Format of hotkey table:
  14672. Offset    Size    Description
  14673.  00h  2 BYTEs    scancode/shift state for desktop hotkey
  14674.  02h  2 BYTEs    scancode/shift state for clipboard paste key
  14675.  04h  2 BYTEs    scancode/shift state for clipboard copy key
  14676.  06h  2 BYTEs    scancode/shift state for screen autodial key
  14677. ----------16FFFD-----------------------------
  14678. INT 16 U - PC Tools v5.1+ DESKTOP API - COPY ???
  14679.     AX = FFFDh
  14680. Return: AX destroyed
  14681. Note:    copies 4000 bytes from ??? to ??? under certain circumstances
  14682. SeeAlso: AX=FF91h,AX=FF92h
  14683. ----------16FFFE-----------------------------
  14684. INT 16 U - PC Tools v5.1+ DESKTOP API - SHOW MOUSE CURSOR
  14685.     AX = FFFEh
  14686. SeeAlso: AX=FFFFh,INT 33/AX=0001h
  14687. ----------16FFFF-----------------------------
  14688. INT 16 U - PC Tools v5.1+ DESKTOP API - HIDE MOUSE CURSOR
  14689.     AX = FFFFh
  14690. SeeAlso: AX=FFFEh,INT 33/AX=0002h
  14691. ----------17----DX0ABC-----------------------
  14692. INT 17 - PRINTER - LPTx v5.x INSTALLATION CHECK
  14693.     DX = 0ABCh
  14694. Return: AX = AAAAh
  14695.     DX = BAAAh
  14696.     ES = code segment of resident portion
  14697. ----------17----DX0B90-----------------------
  14698. INT 17 - PRINTER - LPTx v6.x INSTALLATION CHECK
  14699.     DX = 0B90h
  14700. Return: DX = ABBBh
  14701.     ES = code segment of resident portion
  14702. ----------17----DX0B91-----------------------
  14703. INT 17 - PRINTER - LPTx v7.x INSTALLATION CHECK
  14704.     DX = 0B91h
  14705. Return: DX = ABCBh
  14706.     ES = code segment of resident portion
  14707. ----------17----DX0F5F-----------------------
  14708. INT 17 - PRINTER - LPTx v4.x INSTALLATION CHECK
  14709.     DX = 0F5Fh
  14710. Return: AX = AAAAh
  14711.     DX = F555h
  14712.     ES = code segment of resident portion
  14713. ----------1700-------------------------------
  14714. INT 17 - PRINTER - WRITE CHARACTER
  14715.     AH = 00h
  14716.     AL = character to write
  14717.     DX = printer number (00h-02h)
  14718. Return: AH = printer status
  14719.         bit 7: not busy
  14720.         6: acknowledge
  14721.         5: out of paper
  14722.         4: selected
  14723.         3: I/O error
  14724.         2: unused
  14725.         1: unused
  14726.         0: timeout
  14727. SeeAlso: AH=84h"AX",AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC"
  14728. ----------1701-------------------------------
  14729. INT 17 - PRINTER - INITIALIZE PORT
  14730.     AH = 01h
  14731.     DX = printer number (00h-02h)
  14732. Return: AH = printer status (see AH=00h)
  14733. SeeAlso: AH=02h,INT 1A/AH=10h"NEC"
  14734. ----------1702-------------------------------
  14735. INT 17 - PRINTER - GET STATUS
  14736.     AH = 02h
  14737.     DX = printer number (00h-02h)
  14738. Return: AH = printer status (see AH=00h)
  14739. SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC"
  14740. ----------1702--DX0000-----------------------
  14741. INT 17 - INSET - INSTALLATION CHECK
  14742.     AH = 02h
  14743.     DX = 0000h
  14744.     CX = 07C3h (1987d)
  14745. Return: CX = 07C2h (1986d) if installed
  14746. Note:    INSET is a text/graphics integration program
  14747. ----------1720-------------------------------
  14748. INT 17 - PC Paint Plus 2.0 - PRINTER DRIVER
  14749.     AH = 20h
  14750.     AL = function number
  14751.         00h installation check
  14752.         Return: BX = driver version number (BH=major,BL=minor)
  14753.             CH = ??? (00h)
  14754.             CL = ???
  14755.             DX = ??? (0100h)
  14756.         Note: also enables the remaining functions
  14757.         01h set ??? flag
  14758.         02h get information
  14759.         CL = subfunction
  14760.             00h get printer type
  14761.             Return: ES:DI -> ASCIZ printer name
  14762.             01h get paper size
  14763.             DX = size index
  14764.             Return: ES:DI -> ASCIZ paper size description
  14765.             02h get ???
  14766.             Return: BX = ???
  14767.             03h get printer information???
  14768.             DX = ???
  14769.             ES:BX -> buffer for ??? (min 134 bytes)
  14770.         03h ???
  14771.         ES:BX -> ???
  14772.         04h get ???
  14773.         Return: ES:DI -> ???
  14774.         05h advance printer to next page
  14775.         Note: also clears flag set by function 01h
  14776.         06h advance printer to next page and shut down
  14777.         Note:    also clears flag set by function 01h and disables
  14778.               functions other than 00h
  14779.         07h not implemented, AX returned unchanged
  14780.     BL = printer number???
  14781. Return: AX = status
  14782.         0000h successful
  14783.         0001h invalid printer???
  14784.         0002h ???
  14785.         0003h invalid subfunction
  14786.         0005h driver disabled, must call function 00h first
  14787.         0009h unknown printer error
  14788.         000Bh printer not selected
  14789.         000Ch printer out of paper
  14790.         000Eh error while writing to serial printer
  14791.         000Fh ???
  14792.         0010h invalid function number
  14793.         0011h value out of range
  14794. ----------172400-----------------------------
  14795. INT 17 - Shamrock Software NET.24 v3.11+ - ENABLE/DISABLE API FUNCTIONS
  14796.     AX = 2400h
  14797.     DL = new state
  14798.         00h disabled
  14799.         01h enabled
  14800. Return: DL = 24h if installed
  14801.     DH = minor version number
  14802.     CX = network address of this machine
  14803.     AL = status
  14804.         00h successful
  14805.         01h timeout
  14806.         02h header error
  14807.         03h data error
  14808.         04h busy
  14809.         05h invalid parameters
  14810. SeeAlso: AX=2403h,INT 16/AX=4500h
  14811. ----------172401-----------------------------
  14812. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, NO HANDSHAKE
  14813.     AX = 2401h
  14814.     BL = timeout in clock ticks
  14815. Return: AL = status (see AX=2400h)
  14816.     DX:BX -> receive buffer
  14817. SeeAlso: AX=2402h,AX=2404h,AX=2408h
  14818. ----------172402-----------------------------
  14819. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT BLOCK, NO HANDSHAKE
  14820.     AX = 2402h
  14821.     transmit buffer filled (see AX=2403h)
  14822. Return: AL = status (see AX=2400h)
  14823. SeeAlso: AX=2401h,AX=2403h,AX=2404h,AX=2409h
  14824. ----------172403-----------------------------
  14825. INT 17 - Shamrock Software NET.24 v3.11+ - GET STATUS AND TRANSMISSION BUFFER
  14826.     AX = 2403h
  14827. Return: AL = status (see AX=2400h)
  14828.     CX = number of characters in receive ring buffer
  14829.     DX:BX -> transmit buffer
  14830. SeeAlso: AX=2400h,AX=2402h
  14831. ----------172404-----------------------------
  14832. INT 17 - Shamrock Software NET.24 v3.11+ - SEND ACK BLOCK
  14833.     AX = 2404h
  14834.     BX = target address
  14835. Return: AL = status (see AX=2400h)
  14836. SeeAlso: AX=2402h,AX=2405h
  14837. ----------172405-----------------------------
  14838. INT 17 - Shamrock Software NET.24 v3.11+ - SEND NAK BLOCK
  14839.     AX = 2405h
  14840.     BX = target address
  14841. Return: AL = status (see AX=2400h)
  14842. SeeAlso: AX=2402h,AX=2404h
  14843. ----------172406-----------------------------
  14844. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED RECEIVE
  14845.     AX = 2406h
  14846. Return: AL = status (see AX=2400h)
  14847. SeeAlso: AX=2407h,AX=240Ah
  14848. ----------172407-----------------------------
  14849. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE CHARACTER FROM REMOTE
  14850.     AX = 2407h
  14851. Return: AL = status (see also AX=2400h)
  14852.         06h end of data
  14853.     DL = received character
  14854. SeeAlso: AX=2406h
  14855. ----------172408-----------------------------
  14856. INT 17 - Shamrock Software NET.24 v3.11+ - RECEIVE BLOCK, WITH HANDSHAKE
  14857.     AX = 2408h
  14858. Return: AL = status (see also AX=2400h)
  14859.         06h end of data
  14860.     CX = number of bytes in receive buffer
  14861.     DX:SI -> receive buffer
  14862. SeeAlso: AX=2401h,AX=2405h,AX=2409h
  14863. ----------172409-----------------------------
  14864. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT COMMAND, WITH HANDSHAKE
  14865.     AX = 2409h
  14866.     BX = target address
  14867.     CX = number of data bytes
  14868.     DL = command code to send
  14869.     DS:SI -> data bytes for command
  14870. Return: AL = status (see also AX=2400h)
  14871.         03h no response
  14872.         06h remote currently unable to perform command
  14873. SeeAlso: AX=2405h,AX=2408h
  14874. ----------17240A-----------------------------
  14875. INT 17 - Shamrock Software NET.24 v3.11+ - PREPARE CHARACTER-ORIENTED TRANSMIT
  14876.     AX = 240Ah
  14877. Return: AL = status (see AX=2400h)
  14878. SeeAlso: AX=2406h,AX=240Bh,AX=240Ch
  14879. ----------17240B-----------------------------
  14880. INT 17 - Shamrock Software NET.24 v3.11+ - TRANSMIT SINGLE CHARACTER TO REMOTE
  14881.     AX = 240Bh
  14882.     DL = character to send
  14883. Return: AL = status (see also AX=2400h)
  14884.         03h transmission error
  14885.         06h write error
  14886. SeeAlso: AX=2407h,AX=240Ah,AX=240Ch
  14887. ----------17240C-----------------------------
  14888. INT 17 - Shamrock Software NET.24 v3.11+ - END CHARACTER-ORIENTED TRANSMIT
  14889.     AX = 240Ch
  14890. Return: AL = status (see also AX=2400h)
  14891.         03h transmission error
  14892.         06h remote breaks connection
  14893. SeeAlso: AX=240Ah,AX=240Bh
  14894. ----------175000-----------------------------
  14895. INT 17 - AX (Japanese AT) PRINTER - SET PRINTER COUNTRY CODE
  14896.     AX = 5000h
  14897.     BX = country code
  14898.         0001h USA (English), 0051h Japan
  14899. Return: AL = status
  14900.         00h successful
  14901.         01h bad country code
  14902.         02h other error
  14903. SeeAlso: AX=5001h,AH=51h,INT 10/AX=5000h,INT 16/AX=5000h
  14904. ----------175001-----------------------------
  14905. INT 17 - AX (Japanese AT) PRINTER - GET PRINTER COUNTRY CODE
  14906.     AX = 5001h
  14907. Return: AL = status
  14908.         00h successful
  14909.         BX = country code
  14910.         02h error
  14911. SeeAlso: AX=5000h,AH=51h,INT 10/AX=5001h,INT 16/AX=5001h
  14912. ----------1751-------------------------------
  14913. INT 17 - AX (Japanese AT) PRINTER - JIS to Shift-JIS CONVERSION
  14914.     AH = 51h
  14915.     DX = 2-byte JIS code
  14916. Return: DX = shift-JIS value or 0000h on error
  14917. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  14918.       characters to Shift-JIS characters, and the other performs the
  14919.       opposite conversion
  14920. SeeAlso: AX=5000h,AH=52h
  14921. ----------1752-------------------------------
  14922. INT 17 - AX (Japanese AT) PRINTER - Shift-JIS to JIS CONVERSION
  14923.     AH = 52h
  14924.     DX = 2-byte shift-JIS code
  14925. Return: DX = JIS code or 0000h on error
  14926. Note:    one of AH=51h and AH=52h converts from JIS (Japanese Industry Standard)
  14927.       characters to Shift-JIS characters, and the other performs the
  14928.       opposite conversion
  14929. SeeAlso: AH=51h
  14930. ----------1760-------------------------------
  14931. INT 17 - FLASHUP.COM - INSTALLATION CHECK
  14932.     AH = 60h
  14933. Return: AL = 60h
  14934.     DX = CS of resident code
  14935. Notes:    FLASHUP.COM is part of Flash-Up Windows by The Software Bottling Co.
  14936.     FLASHUP also hooks INT 10 and receives commands via INT 10/AH=09h,0Ah
  14937.       consisting of an 80h followed by the actual command
  14938. SeeAlso: INT 10/AH=09h,INT 10/AH=0Ah
  14939. ----------1761-------------------------------
  14940. INT 17 - SPEEDSCR.COM - INSTALLATION CHECK
  14941.     AH = 61h
  14942. Return: AL = 61h
  14943.     DX = CS of resident code
  14944. Note:    SPEEDSCR.COM is by The Software Bottling Co.
  14945. ----------1781-------------------------------
  14946. INT 17 - Alloy NTNX, MW386 - CANCEL JOBS FOR CURRENT USER
  14947.     AH = 81h
  14948.     AL = 00h (NTNX compatibility mode)
  14949.     CL = number of jobs to cancel
  14950. Return: AL = status
  14951.         00h success
  14952.         01h..7Fh warning
  14953.         80h general failure
  14954.         81h host overloaded (NTNX only)
  14955.         82h module busy (NTNX only)
  14956.         83h host busy (NTNX only)
  14957.         84h re-entry flag set
  14958.         85h invalid request
  14959.         86h invalid printer
  14960.         87h invalid process ID
  14961.         89h access denied
  14962.         8Ah option not available for given port type
  14963.         8Bh option not available for given task type
  14964.         91h printer busy
  14965.         C2h file not found
  14966.         C3h path not found
  14967.         C4h file access failure
  14968. Note:    cancels the last CL printouts for the current task
  14969. SeeAlso: AH=82h
  14970. ----------1782-------------------------------
  14971. INT 17 - Alloy NTNX, MW386 - CANCEL ALL JOBS FOR CURRENT USER
  14972.     AH = 82h
  14973.     AL = 00h (NTNX compatibility mode)
  14974. Return: AL = status (see AH=81h)
  14975. SeeAlso: AH=81h
  14976. ----------1783-------------------------------
  14977. INT 17 - Alloy NTNX, MW386 - SET NUMBER OF COPIES
  14978.     AH = 83h
  14979.     AL = mode
  14980.         00h NTNX compatibility
  14981.         CL = number of copies (max 99, default 1)
  14982.         02h MW386 v2+
  14983.         BX = logical device number
  14984.             00h-03h = LPT1-LPT4
  14985.             04h-07h = COM1-COM4
  14986.         CX = number of copies
  14987. Return: AL = status (see AH=81h)
  14988. Note:    in NTNX compatibility mode, this function only affects LPT1
  14989. ----------1784-------------------------------
  14990. INT 17 - Alloy NTNX, MW386 - GENERATE PRINT BREAK
  14991.     AH = 84h
  14992.     AL = mode
  14993.         00h NTNX compatibility
  14994.         02h MW386 v2+
  14995.         BX = logical device number
  14996.             00h-03h = LPT1-LPT4
  14997.             04h-07h = COM1-COM4
  14998. Note:    closes spool file and tells spooler to queue the print job (LPT1 only
  14999.       under MW386 in NTNX compatibility mode)
  15000. ----------1784-------------------------------
  15001. INT 17 - AX (Japanese AT) PRINTER - OUTPUT CHARACTER WITHOUT CONVERSION
  15002.     AH = 84h
  15003.     AL = character
  15004.     DX = printer number
  15005. Return: AH = printer status (see AH=00h)
  15006. SeeAlso: AH=00h,AH=85h
  15007. ----------1785-------------------------------
  15008. INT 17 - AX (Japanese AT) PRINTER - ENABLE/DISABLE CHARACTER CONVERSION
  15009.     AH = 85h
  15010.     AL = new state (00h enabled, 01h disabled)
  15011. SeeAlso: AH=84h"AX"
  15012. ----------1787-------------------------------
  15013. INT 17 - Alloy NTNX - SET INDOS POINTER
  15014.     AH = 87h
  15015.     AL = 00h
  15016.     CX:BX -> buffer for user-written printer drivers
  15017. Return: BX,CX destroyed
  15018. Note:    must be executed before the printer is enabled
  15019. SeeAlso: AH=8Ah
  15020. ----------1788-------------------------------
  15021. INT 17 - Alloy NTNX, MW386 - REMOVE PRINTER FROM SPOOLER
  15022.     AH = 88h
  15023.     AL = mode
  15024.         00h NTNX compatibility
  15025.         DX = NTNX printer number
  15026.             00h host LPT1
  15027.             01h host LPT2
  15028.             02h host LPT3
  15029.             03h host LPT4
  15030.             04h host COM1
  15031.             05h host COM2
  15032.             06h user's logical COM2
  15033.             07h user's terminal AUX port
  15034.             08h user's logical COM1 (MW386 only)
  15035.         01h MW386
  15036.         DX = MW386 printer number
  15037. Return: AH = status (see AH=81h)
  15038. Note:    removes specified printer from the spooler's list of printers
  15039. SeeAlso: AH=89h,AH=8Bh
  15040. ----------1789-------------------------------
  15041. INT 17 - Alloy NTNX, MW386 - ADD PRINTER TO SPOOLER
  15042.     AH = 89h
  15043.     AL = mode
  15044.         00h NTNX compatibility
  15045.         DX = NTNX printer number (see AH=88h)
  15046.         01h MW386
  15047.         DX = MW386 printer number
  15048. Return: AL = status (see AH=81h)
  15049. Note:    the specified printer is added to the spooler's list of available
  15050.       printers
  15051. SeeAlso: AH=88h,AH=8Bh
  15052. ----------178A-------------------------------
  15053. INT 17 - Alloy NTNX - ACTIVATE USER-WRITTEN PRINTER DRIVER
  15054.     AH = 8Ah
  15055.     ???
  15056. SeeAlso: AH=92h
  15057. ----------178B-------------------------------
  15058. INT 17 - Alloy MW386 - GET PHYSICAL DEVICE NUMBER FROM NAME
  15059.     AH = 8Bh
  15060.     DS:DX -> ASCIZ printer name
  15061. Return: AL = status (see also AH=81h)
  15062.         00h successful
  15063.         DX = physical device number
  15064. SeeAlso: AH=89h,AH=8Ch,INT 14/AH=20h"Alloy"
  15065. ----------178C-------------------------------
  15066. INT 17 - Alloy MW386 - GET DEVICE NAME FROM PHYSICAL DEVICE NUMBER
  15067.     AH = 8Ch
  15068.     DX = physical device number
  15069.     ES:DI -> 17-byte buffer for ASCIZ device name
  15070. Return: AL = status (see also AH=81h)
  15071.         00h successful
  15072.         ES:DI buffer filled
  15073. SeeAlso: AH=88h,AH=8Bh
  15074. ----------178D-------------------------------
  15075. INT 17 - Alloy NTNX,MW386 - RESET SPOOLER
  15076.     AH = 8Dh
  15077.     AL = 00h
  15078. Notes:    clears all buffers and resets spooler to boot-up values
  15079.     MW386 supports this function for compatibility only; it is a NOP
  15080. Return: AL = status (see AH=81h)
  15081. ----------178E-------------------------------
  15082. INT 17 - Alloy NTNX - GET INT 28 ENTRY POINT
  15083.     AH = 8Eh
  15084.     AL = 00h
  15085. Return: CX:BX -> INT 28 entry point
  15086. SeeAlso: AH=8Fh
  15087. ----------178F-------------------------------
  15088. INT 17 - Alloy NTNX - GET DOS INTERCEPT ENTRY POINT
  15089.     AH = 8Fh
  15090.     AL = 00h
  15091. Return: CX:BX -> DOS intercept routine
  15092. SeeAlso: AH=8Eh
  15093. ----------1790-------------------------------
  15094. INT 17 - Alloy NTNX, MW386 - SPOOL FILE BY NAME
  15095.     AH = 90h
  15096.     AL = mode
  15097.         00h NTNX compatibility
  15098.         DL = printer code (FFh=current) (NTNX, MW386 v1.x only)
  15099.         DH = number of copies (FFh=current) (NTNX, MW386 v1.x only)
  15100.         02h MW386 v2+
  15101.         BX = logical device number
  15102.             00h-03h = LPT1-LPT4
  15103.             04h-07h = COM1-COM4
  15104.     CX:SI -> ASCIZ pathname
  15105. Return: AL = status (see AH=81h)
  15106. Note:    in mode 00h, the file is always sent to logical LPT1
  15107. SeeAlso: AH=A0h
  15108. ----------1791-------------------------------
  15109. INT 17 - Alloy NTNX, MW386 - GET USER NUMBER AND CURRENT PRINTER
  15110.     AH = 91h
  15111.     AL = mode
  15112.         00h NTNX compatibility
  15113.         Return: CX = user number (00h = host)
  15114.             DX = currently selected printer number (00h-08h)
  15115.         01h MW386
  15116.         Return: CX = user number
  15117.             DX = physical dev number of currently selected printer
  15118.         02h MW386 v2+
  15119.         BX = logical device number
  15120.             00h-03h = LPT1-LPT4
  15121.             04h-07h = COM1-COM4
  15122.         Return: CX = user number
  15123.             DX = physical device number
  15124. Return: AL = status (see AH=81h)
  15125. SeeAlso: AH=8Ch
  15126. ----------1792-------------------------------
  15127. INT 17 - Alloy NTNX - CHECK PRINTER DRIVER
  15128.     AH = 92h
  15129.     AL = 00h
  15130.     CL = 00h
  15131. Return: CL = driver state
  15132.         01h initialized
  15133.         80h not initialized
  15134.     AX = status (see AH=81h)
  15135. SeeAlso: AH=8Ah
  15136. ----------1794-------------------------------
  15137. INT 17 - Alloy NTNX, MW386 - SELECT PRINTER
  15138.     AH = 94h
  15139.     AL = mode
  15140.         00h NTNX compatibility
  15141.         DX = NTNX printer number (see AH=88h)
  15142.         01h MW386
  15143.         DX = MW386 printer number
  15144.         02h MW386 v2+
  15145.         BX = logical printer number
  15146.         DX = MW386 printer number
  15147. Return: AL = status (see AH=81h)
  15148. Note:    modes 00h and 01h affect only logical LPT1
  15149. SeeAlso: AH=8Bh,AH=95h
  15150. ----------1795-------------------------------
  15151. INT 17 - Alloy NTNX, MW386 - GET CURRENT PRINTER
  15152.     AH = 95h
  15153.     AL = mode
  15154.         00h NTNX compatibility
  15155.         Return: DX = NTNX printer number (see AH=88h)
  15156.                 (FFFFh if current printer not compatible with NTNX)
  15157.         01h MW386
  15158.         Return: DX = MW386 printer number
  15159.         02h MW386 v2+
  15160.         BX = logical device number
  15161.             00h-03h = LPT1-LPT4
  15162.             04h-07h = COM1-COM4
  15163.         Return: DX = MW386 printer number (FFFFh = none)
  15164. Return: AL = status (see AH=81h)
  15165. Note:    modes 00h and 01h return the printer number of logical LPT1 only
  15166. SeeAlso: AH=94h
  15167. ----------1796-------------------------------
  15168. INT 17 - Alloy NTNX - SET SERIAL PORT PARAMETERS
  15169.     AH = 96h
  15170.     AL = 00h
  15171. Note:    documentation states that this is a NOP, doing only XOR AX,AX before
  15172.       returning
  15173. SeeAlso: INT 14/AH=24h
  15174. ----------1797-------------------------------
  15175. INT 17 - Alloy NTNX, MW386 - SET DATA DRIVEN PRINT BREAK
  15176.     AH = 97h
  15177.     AL = mode
  15178.         00h NTNX compatibility
  15179.         02h MW386 v2+
  15180.         BX = logical device number
  15181.             00h-03h = LPT1-LPT4
  15182.             04h-07h = COM1-COM4
  15183.     CH,CL,DH = three character break sequence
  15184.     DL = subfunction
  15185.         00h set break string
  15186.         else reset break
  15187. Return: AL = status (see AH=81h)
  15188. Notes:    mode 00h affects only logical LPT1
  15189.     when the break string is encountered, the spool file will be closed and
  15190.       queued for printing automatically
  15191.     the break string is not permanently saved, and will be reset each time
  15192.       MW386 or the user is rebooted
  15193. SeeAlso: AH=9Bh
  15194. ----------1798-------------------------------
  15195. INT 17 - Alloy NTNX,MW386 - RESTART PRINTER
  15196.     AH = 98h
  15197.     AL = 00h
  15198.     DL = printer number (FFh=current)
  15199. Return: AL = status
  15200.         00h successful
  15201.         01h incorrect printer
  15202.         02h task not found
  15203. Note:    MW386 supports this function for compatibility only; it is a NOP
  15204. ----------1799-------------------------------
  15205. INT 17 - Alloy NTNX, MW386 - GET/SET PRINTER MODE
  15206.     AH = 99h
  15207.     AL = mode
  15208.         00h NTNX compatibility
  15209.         DL = NTNX printer number (see AH=88h)
  15210.             (FFh = task's current logical LPT1)
  15211.         DH = mode
  15212.             bit 0: get mode if 1, set mode if 0
  15213.             1: private ("attached")
  15214.             2: direct instead of spooled
  15215.             3-7 reserved (0)
  15216.         01h MW386
  15217.         DX = MW386 printer number
  15218.         CL = mode (as for DH above)
  15219. Return: AL = status (see AH=81h)
  15220.     DH = mode (bits 1 and 2 set as above)
  15221.     DL = printer owner's user number if not spooled
  15222. ----------179A-------------------------------
  15223. INT 17 - Alloy NTNX,MW386 - SET TAB EXPANSION
  15224.     AH = 9Ah
  15225.     AL = mode
  15226.         00h NTNX compatibility
  15227.         DX = NTNX printer number (see AH=88h)
  15228.             (FFFFh = current logical LPT1)
  15229.         01h MW386
  15230.         DX = MW386 printer number
  15231.     CL = tab length (00h = no expansion, 01h-63h = spaces per tab)
  15232. Return: AL = status (see AH=81h)
  15233. Note:    beginning with MW386 v2.0, tab expansion is set on a per-printer basis
  15234.       rather than a per-user basis; NTNX and MW386 v1.x ignore DX
  15235. SeeAlso: AH=A4h
  15236. ----------179B-------------------------------
  15237. INT 17 - Alloy NTNX,MW386 - SET PRINT BREAK TIMEOUT
  15238.     AH = 9Bh
  15239.     AL = mode
  15240.         00h NTNX compatibility
  15241.         CX = timeout value in clock ticks (1/18 sec) (00h = never)
  15242.         01h MW386
  15243.         CX = timeout value in seconds (00h = never)
  15244.         02h MW386 v2+
  15245.         BX = logical device number
  15246.             00h-03h = LPT1-LPT4
  15247.             04h-07h = COM1-COM4
  15248.         CX = timeout value in seconds (00h = never)
  15249. Return: AL = status (see AH=81h)
  15250. Notes:    modes 00h and 01h affect only the current logical LPT1
  15251.     if no data is sent to a printer for the specified amount of time, the
  15252.       spool file will be closed and queued for printing automatically
  15253. SeeAlso: AH=97h
  15254. ----------17A0-------------------------------
  15255. INT 17 - Alloy MW386 - SPOOL COPY OF FILE
  15256.     AH = A0h
  15257.     AL = mode
  15258.         00h NTNX compatibility
  15259.         DX = ??? (NTNX, MW386 v1.x only)
  15260.         02h MW386 v2+
  15261.         BX = logical device number
  15262.             00h-03h = LPT1-LPT4
  15263.             04h-07h = COM1-COM4
  15264.     CX:SI -> ASCIZ pathname
  15265. Return: AL = status (see AH=81h)
  15266. Notes:    makes a copy of the specified file in the spooler's directory, allowing
  15267.       the original file to be modified or deleted while the copy is printed
  15268.     in mode 00h, the file is printed on logical LPT1
  15269. SeeAlso: AH=90h
  15270. ----------17A4-------------------------------
  15271. INT 17 - Alloy MW386 - ENABLE/DISABLE FORM FEED
  15272.     AH = A4h
  15273.     AL = new state
  15274.         00h form feed after end of print job disabled
  15275.         01h form feed enabled
  15276. Return: AL = status (see AH=81h)
  15277. Note:    only affects the current logical LPT1
  15278. SeeAlso: AH=9Ah,AH=A6h,INT 7F/AH=05h"NTNX (Host)"
  15279. ----------17A6-------------------------------
  15280. INT 17 - Alloy MW386 - ENABLE/DISABLE BANNER PAGE
  15281.     AH = A6h
  15282.     AL = new state
  15283.         00h banner page before print job disabled
  15284.         01h banner page enabled
  15285. Return: AL = status (see AH=81h)
  15286. Note:    only affects the current logical LPT1
  15287. SeeAlso: AH=A4h
  15288. ----------17A7-------------------------------
  15289. INT 17 - Alloy MW386 v2+ - GET/SET SPOOL FLAGS
  15290.     AH = A7h
  15291.     AL = spool flags
  15292.         bit 0: banner page enabled (see AH=A4h)
  15293.         1: form feed enabled (see AH=A6h)
  15294.         2-6: reserved (0)
  15295.         7: set flags if 1, get flags if 0
  15296.     BX = logical device number
  15297.         00h-03h = LPT1-LPT4
  15298.         04h-07h = COM1-COM4
  15299. Return: AL = status (see AH=81h)
  15300. Note:    the documentation does not state which register contains the result of
  15301.       a GET
  15302. SeeAlso: AH=A4h,AH=A6h
  15303. ----------17A8-------------------------------
  15304. INT 17 - Alloy MW386 - DEFINE TEMPORARY FILENAME
  15305.     AH = A8h
  15306.     CX:SI -> ASCIZ filename without extension (max 8 chars)
  15307. Return: AL = status (see AH=81h)
  15308. Note:    allows application to specify banner page filename for spool files
  15309.       collected from the application's printer output
  15310. SeeAlso: AH=A9h
  15311. ----------17A9-------------------------------
  15312. INT 17 - Alloy MW386 - CHANGE TEMPORARY SPOOL DRIVE
  15313.     AH = A9h
  15314.     AL = new spool drive (2=C:,3=D:,etc)
  15315. Return: AL = status (see AH=81h)
  15316. Note:    does not remove previous spooling directory since jobs may be pending
  15317. SeeAlso: AH=A8h
  15318. ----------17AA-------------------------------
  15319. INT 17 - Alloy MW386 v2+ - GET REAL-TIME PRINTER STATUS
  15320.     AH = AAh
  15321.     AL = mode
  15322.         00h NTNX
  15323.         DX = NTNX printer number (see AH=88h)
  15324.         01h MW386
  15325.         DX = MW386 printer number
  15326. Return: AH = instantaneous printer status
  15327.         00h printer ready
  15328.         01h not ready
  15329.         12h off line
  15330.         13h out of paper
  15331.         14h general device failure
  15332.         15h device timeout
  15333.         16h bad device number
  15334. ----------17AF-------------------------------
  15335. INT 17 - Alloy MW386 - CHECK SPOOLER
  15336.     AH = AFh
  15337. Return: AX = 55AAh if spooler available
  15338. ----------17C0-------------------------------
  15339. INT 17 - PC Magazine PCSpool - GET CONTROL BLOCK ADDRESS
  15340.     AH = C0h
  15341.     DX = printer port (0-3)
  15342. Return: ES:BX -> control block (see below)
  15343. SeeAlso: AH=C1h
  15344.  
  15345. Format of control block:
  15346. Offset    Size    Description
  15347.  00h    WORD    printer number
  15348.  02h    WORD    address of printer status port
  15349.  04h    WORD    number of first record in queue
  15350.  06h    WORD    number of last record in queue
  15351.  08h    DWORD    characters already printed
  15352.  0Ch    DWORD    number of characters remaining
  15353.  10h    DWORD    pointer to dequeue buffer
  15354.  14h    DWORD    previous count of characters printed
  15355.  18h    DWORD    number of clock ticks taken to print them
  15356.  1Ch    WORD    offset of next character to output
  15357.  1Eh    WORD    offset of next character to print
  15358.  20h    WORD    pointer to spooling queue record
  15359.  22h    BYTE    current spooling status
  15360.  23h    BYTE    current printer status:
  15361.         00h OK
  15362.         01h not ready
  15363.         02h paused with message
  15364.         03h paused
  15365.         04h initializing
  15366.         FEh non-existent port
  15367.         FFh not spooled
  15368.  24h    BYTE    current control record type
  15369.  25h    WORD    observed printer speed
  15370.  27h    WORD    characters to print per service
  15371.  29h    BYTE    01h if disk write needed
  15372.  2Ah    BYTE    01h if queued data should be flushed
  15373.  2Bh    BYTE    01h to update cps status
  15374. ----------17C1--------------------------------
  15375. INT 17 - PC Magazine PCSpool - BUILD PAUSE CONTROL RECORD
  15376.     AH = C1h
  15377.     DX = printer port (0-3)
  15378.     DS:SI -> ASCIIZ string to save for display
  15379. Note:    flushes pending writes
  15380. SeeAlso: AH=C0h,AH=C2h
  15381. ----------17C2-------------------------------
  15382. INT 17 - PC Magazine PCSpool - FLUSH PENDING WRITES
  15383.     AH = C2h
  15384.     DX = printer port (0-3)
  15385. SeeAlso: AH=C3h
  15386. ----------17C3-------------------------------
  15387. INT 17 - PC Magazine PCSpool - CANCEL PRINTER QUEUE (FLUSH ALL QUEUED OUTPUT)
  15388.     AH = C3h
  15389.     DX = printer port (0-3)
  15390. SeeAlso: AH=C2h,AH=C7h
  15391. ----------17C4-------------------------------
  15392. INT 17 - PC Magazine PCSpool - QUERY SPOOLER ACTIVE
  15393.     AH = C4h
  15394. Return: DI = B0BFh
  15395.     SI = segment
  15396. ----------17C5-------------------------------
  15397. INT 17 - PC Magazine PCSpool - JOB SKIP PRINTER QUEUE
  15398.     AH = C5h
  15399.     DX = printer port (0-3)
  15400. Note:    cancels up to the pause record 
  15401. ----------17C6-------------------------------
  15402. INT 17 - PC Magazine PCSpool - CHECK PRINTER QUEUE STATUS
  15403.     AH = C6h
  15404.     DX = printer port (0-3)
  15405. Return: AX = 0 printer not active or at pause
  15406.        = 1 printer busy
  15407. ----------17C7-------------------------------
  15408. INT 17 - PC Magazine PCSpool - CLOSE QUEUE
  15409.     AH = C7h
  15410.     DX = printer port (0-3)
  15411. SeeAlso: AH=C3h
  15412. ----------17CD00-----------------------------
  15413. INT 17 - INSET - EXECUTE COMMAND STRING
  15414.     AX = CD00h
  15415.     DS:DX -> ASCIZ command string (max 80 bytes)
  15416. Return: CX = 07C2h (1986d)
  15417. Note:    user interface menus pop up after last command, unless that command
  15418.     exits INSET
  15419. ----------17CD01-----------------------------
  15420. INT 17 - INSET - GET IMAGE SIZE
  15421.     AX = CD01h
  15422.     DS:DX -> ASCIZ name of image file
  15423. Return: AX = height in 1/720th inch
  15424.     BX = width in 1/720th inch
  15425.     CX = 07C2h (1986d)
  15426. ----------17CD02-----------------------------
  15427. INT 17 - INSET - INITIALIZE
  15428.     AX = CD02h
  15429. Return: CX = 07C2h (1986d)
  15430. Note:    all open files are closed and the printer is reset
  15431. SeeAlso: AX=CD04h
  15432. ----------17CD03-----------------------------
  15433. INT 17 - INSET - EXECUTE INSET MENU WITHIN OVERRIDE MODE
  15434.     AX = CD03h
  15435. Return: CX = 07C2h (1986d)
  15436. ----------17CD04-----------------------------
  15437. INT 17 - INSET - INITIALIZE LINKED MODE
  15438.     AX = CD04h
  15439.     ES:SI -> FAR routine for linked mode
  15440. Return: CX = 07C2h
  15441. Note:    calling sequence for linked-mode routine
  15442.     AL = 00h send character in BL to printer
  15443.        = 01h send CX bytes from DS:DX to printer
  15444.        = 02h move print head to horizontal starting position of image
  15445.     return code for linked-mode routine:
  15446.     AX = 0000h success
  15447.        = 0001h failure
  15448. SeeAlso: AX=CD02h,AX=CD08h
  15449. ----------17CD05-----------------------------
  15450. INT 17 - INSET - START MERGING IMAGE INTO TEXT
  15451.     AX = CD05h
  15452.     DS:DX -> ASCIZ name of PIX file
  15453.     CX = left margin of text in 1/720th inch
  15454. Return: AH = printer type
  15455.         00h page-oriented (multiple images may be placed side-by-side)
  15456.         01h line-oriented (use AX=CD06h for vertical paper movement)
  15457.     CX = 07C2h (1986d)
  15458. SeeAlso: AX=CD07h
  15459. ----------17CD06-----------------------------
  15460. INT 17 - INSET - GRAPHICS LINE FEED
  15461.     AX = CD06h
  15462. Return: AH = completion status
  15463.         00h image complete
  15464.         01h image incomplete
  15465.     CX = 07C2h (1986d)
  15466. SeeAlso: AX=CD09h
  15467. ----------17CD07-----------------------------
  15468. INT 17 - INSET - FLUSH GRAPHICS FROM MERGE BUFFER
  15469.     AX = CD07h
  15470. Return: CX = 07C2h
  15471. SeeAlso: AX=CD05h
  15472. ----------17CD08-----------------------------
  15473. INT 17 - INSET - CANCEL LINK MODE
  15474.     AX = CD08h
  15475. Return: CX = 07C2h
  15476. SeeAlso: AX=CD04h
  15477. ----------17CD09-----------------------------
  15478. INT 17 - INSET - ALTER TEXT LINE SPACING
  15479.     AX = CD09h
  15480.     CX = line spacing in 1/720th inch
  15481. Return: CX = 07C2h
  15482. Note:    not yet implemented, line spacing is currently fixed at 1/6 inch
  15483. SeeAlso: AX=CD06h
  15484. ----------17CD0A-----------------------------
  15485. INT 17 - INSET - GET SETUP
  15486.     AX = CD0Ah
  15487.     DS:DX -> buffer for IN.SET data
  15488. Return: CX = 07C2h
  15489. ----------17CD0B-----------------------------
  15490. INT 17 - INSET - START GETTING SCALED IMAGE
  15491.     AX = CD0Bh
  15492.     DS:SI -> ASCIZ pathname of .PIX file
  15493.     BX = number of bitplanes
  15494.     CX = number of rows in output bitmap
  15495.     DX = number of columns in output bitmap
  15496. Return: AX = status
  15497.         0000h OK
  15498.         FFFFh error    
  15499. Note:    image is returned in strips by repeated calls to AX=CD0Ch
  15500. ----------17CD0C-----------------------------
  15501. INT 17 - INSET - GET NEXT IMAGE STRIP
  15502.     AX = CD0Ch
  15503. Return:    AX = status
  15504.         0000h OK but not complete
  15505.         0001h OK and image complete
  15506.         FFFFh error
  15507.     DS:SI -> buffer (max 4K) for bit map strip 
  15508.     CX = start row
  15509.     DX = number of rows
  15510.     BX = offset in bytes between bit planes
  15511. Note:    buffer may be overwritten by subsequent calls
  15512. SeeAlso: AX=CD0Bh
  15513. ----------17F0-------------------------------
  15514. INT 17 - NorthNet Jetstream API - INSTALLATION CHECK
  15515.     AH = F0h
  15516.     DX = printer port (0-3)
  15517. Return: AX = 0001h Jetstream present
  15518.          else  non-Jetstream port
  15519. Note:    NorthNet Jetstream is a high-performance DMA-driven parallel card able
  15520.       to drive printers at up to 80000 characters per second
  15521. ----------17F1-------------------------------
  15522. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER
  15523.     AH = F1h
  15524.     CX = data buffer length
  15525.     DX = printer port (0-3)
  15526.     DS:SI -> data buffer
  15527. Return: AX = status
  15528.         0000h printer not ready (see also AH=02h)
  15529.         other printing started
  15530. SeeAlso: AH=00h,AH=F2h,AH=F3h,AH=F5h
  15531. ----------17F2-------------------------------
  15532. INT 17 - NorthNet Jetstream API - GET PRINT PROGRESS STATUS
  15533.     AH = F2h
  15534.     DX = printer port (0-3)
  15535. Return: AX = status
  15536.         0000h prior print request finished
  15537.         other number of characters left to print
  15538. SeeAlso: AH=02h,AH=F1h,AH=F3h
  15539. ----------17F3-------------------------------
  15540. INT 17 - NorthNet Jetstream API - ABORT PRINT OPERATION
  15541.     AH = F3h
  15542.     DX = printer port (0-3)
  15543. Return: AX = number of unprinted characters due to abort
  15544. SeeAlso: AH=F1h,AH=F4h
  15545. ----------17F4-------------------------------
  15546. INT 17 - NorthNet Jetstream API - SET COMPLETION (POST) ADDRESS
  15547.     AH = F4h
  15548.     DX = printer port (0-3)
  15549.     DS:DS -> FAR post address (called with interrupts on)
  15550. SeeAlso: AH=F1h,AH=F3h
  15551. ----------17F5-------------------------------
  15552. INT 17 - NorthNet Jetstream API - PRINT DATA BUFFER FROM EXTENDED MEMORY
  15553.     AH = F5h
  15554.     CX = data buffer length
  15555.     DX = printer port (0-3)
  15556.     DS:SI -> data buffer (32-bit physical address)
  15557. Return: AX = status
  15558.         0000h printer not ready (see also AH=02h)
  15559.         other printing started
  15560. SeeAlso: AH=F1h
  15561. ----------18---------------------------------
  15562. INT 18 - START CASSETTE BASIC
  15563. Note:    only PCs produced by IBM contain BASIC in ROM, so the action is
  15564.       unpredicatable on compatibles; this interrupt often reboots the
  15565.       system, and often has no effect at all
  15566. SeeAlso: INT 86"NetBIOS"
  15567. ----------1800-------------------------------
  15568. INT 18 - NEC PC-9800 series - KEYBOARD - GET KEYSTROKE
  15569.     AH = 00h
  15570. Return: AX = keystroke
  15571. SeeAlso: AH=01h,AH=02h,INT 16/AH=00h
  15572. ----------1801-------------------------------
  15573. INT 18 - NEC PC-9800 series - KEYBOARD - CHECK FOR KEYSTROKE
  15574.     AH = 01h
  15575. Return: ZF set if no keystroke available
  15576.     ZF clear if keystroke available
  15577.         AX = keystroke
  15578. SeeAlso: AH=00h,AH=02h,INT 16/AH=01h
  15579. ----------1802-------------------------------
  15580. INT 18 - NEC PC-9800 series - KEYBOARD - GET SHIFT STATUS
  15581.     AH = 02h
  15582. Return: AL = shift flags
  15583. SeeAlso: AH=00h,AH=02h,AH=03h,AH=04h,INT 16/AH=02h
  15584. ----------1803-------------------------------
  15585. INT 18 - NEC PC-9800 series - KEYBOARD - INITIALIZE
  15586.     AH = 03h
  15587.     ???
  15588. Return: ???
  15589. SeeAlso: AH=00h,AH=04h
  15590. ----------1804-------------------------------
  15591. INT 18 - NEC PC-9800 series - KEYBOARD - KEY PRESSED
  15592.     AH = 04h
  15593.     ???
  15594. Return: ???
  15595. Note:    details are not available at this time
  15596. SeeAlso: AH=00h,AH=02h,INT 16/AH=00h,INT 16/AH=01h,INT 16/AH=02h
  15597. ----------18---------------------------------
  15598. INT 18 - NEC PC-9800 series - VIDEO
  15599.     AH = function
  15600.         0Ah set video mode
  15601.         0Bh get video mode
  15602.         0Ch start text screen display
  15603.         0Dh end text screen display
  15604.         0Eh set single display area
  15605.         0Fh set multiple display area
  15606.         10h set cursor shape
  15607.         11h display cursor
  15608.         12h terminate cursor
  15609.         13h set cursor position
  15610.         14h read font patter
  15611.         16h initialize text video RAM
  15612.         1Ah define user character
  15613.     ???
  15614. Return: ???
  15615. Notes:    details are not available at this time
  15616.     text video RAM is located at segments A000h (characters) and A200h
  15617.       (attributes)
  15618. ----------19---------------------------------
  15619. INT 19 - SYSTEM - BOOTSTRAP LOADER
  15620.    Reboot the system without clearing memory or restoring interrupt vectors.
  15621.    Because interrupt vectors are preserved, this interrupt usually causes a
  15622.    system hang if any TSRs have hooked vectors from 00h through 1Ch,
  15623.    particularly INT 08.
  15624.  
  15625.    Usually, the BIOS will try to read sector 1, head 0, track 0 from drive A:
  15626.    to 0000h:7C00h.  If this fails, and a hard disk is installed, the BIOS will
  15627.    read sector 1, head 0, track 0 of the first hard disk.  This sector should
  15628.    contain a master bootstrap loader and a partition table.  After loading the
  15629.    master boot sector at 0000h:7C00h, the master bootstrap loader is given
  15630.    control.  It will scan the partition table for an active partition, and will
  15631.    then load the operating system's bootstrap loader (contained in the first
  15632.    sector of the active partition) and give it control.
  15633.  
  15634.    True IBM PCs issue an INT 18 if neither floppy nor hard disk have a valid
  15635.    boot sector.
  15636.  
  15637. Notes:    to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
  15638.       0040h:0072h and jump to FFFFh:0000h.    For a cold boot equivalent to
  15639.       a reset, store 0000h at 0040h:0072h before jumping.
  15640.     VDISK.SYS hooks this interrupt to allow applications to find out how
  15641.       much extended memory has been used by VDISKs (see below).  DOS 3.3+
  15642.       PRINT hooks INT 19 but does not set up a correct VDISK header block
  15643.       at the beginning of its INT 19 handler segment, thus causing some
  15644.       programs to overwrite extended memory which is already in use.
  15645.     default handler is at F000h:E6F2h for 100% compatible BIOSes
  15646. SeeAlso: INT 14/AH=17h,INT 18
  15647.  
  15648. Format of VDISK header block (at beginning of INT 19 handler's segment):
  15649. Offset    Size    Description
  15650.  00h 18 BYTEs    n/a (for VDISK.SYS, the device driver header)
  15651.  12h 11 BYTEs    signature string "VDISK     Vn.m" for VDISK.SYS version n.m
  15652.  1Dh 15 BYTEs    n/a
  15653.  2Ch  3 BYTEs    linear address of first byte of available extended memory
  15654.  
  15655. Format of hard disk master boot sector:
  15656. Offset    Size    Description
  15657.  00h 446 BYTEs    Master bootstrap loader code
  15658. 1BEh 16 BYTEs    partition record for partition 1 (see below)
  15659. 1CEh 16 BYTEs    partition record for partition 2
  15660. 1DEh 16 BYTEs    partition record for partition 3
  15661. 1EEh 16 BYTEs    partition record for partition 4
  15662. 1FEh    WORD    signature, AA55h indicates valid boot block
  15663.  
  15664. Format of partition record:
  15665. Offset    Size    Description
  15666.  00h    BYTE    boot indicator (80h = active partition)
  15667.  01h    BYTE    partition start head
  15668.  02h    BYTE    partition start sector (bits 0-5)
  15669.  03h    BYTE    partition start track (bits 8,9 in bits 6,7 of sector)
  15670.  04h    BYTE    operating system indicator (see below)
  15671.  05h    BYTE    partition end head
  15672.  06h    BYTE    partition end sector (bits 0-5)
  15673.  07h    BYTE    partition end track (bits 8,9 in bits 6,7 of sector)
  15674.  08h    DWORD    sectors preceding partition
  15675.  0Ch    DWORD    length of partition in sectors
  15676.  
  15677. Values for operating system indicator:
  15678.  00h empty
  15679.  01h DOS 12-bit FAT
  15680.  02h XENIX root file system
  15681.  03h XENIX /usr file system (obsolete)
  15682.  04h DOS 16-bit FAT
  15683.  05h DOS 3.3+ extended partition
  15684.  06h DOS 3.31+ Large File System
  15685.  07h QNX
  15686.  07h OS/2 HPFS
  15687.  07h Advanced Unix
  15688.  08h AIX bootable partition, SplitDrive
  15689.  09h AIX data partition
  15690.  09h Coherent filesystem
  15691.  0Ah OPUS
  15692.  0Ah Coherent swap partition
  15693.  10h OPUS
  15694.  24h NEC MS-DOS 3.x
  15695.  40h VENIX 80286
  15696.  50h Disk Manager, read-only partition
  15697.  51h Disk Manager, read/write partition
  15698.  51h Novell???
  15699.  52h CP/M
  15700.  52h Microport System V/386
  15701.  56h GoldenBow VFeature
  15702.  61h SpeedStor
  15703.  63h Unix SysV/386, 386/ix
  15704.  63h Mach, MtXinu BSD 4.3 on Mach
  15705.  63h GNU HURD
  15706.  64h Novell NetWare
  15707.  75h PC/IX
  15708.  80h Minix v1.1 - 1.4a
  15709.  81h Minix v1.4b+
  15710.  81h Linux
  15711.  82h Linux Swap partition (planned)
  15712.  93h Amoeba file system
  15713.  94h Amoeba bad block table
  15714.  B7h BSDI file system (secondarily swap)
  15715.  B8h BSDI swap partition (secondarily file system)
  15716.  C6h DR-DOS 6.0 LOGIN.EXE-secured partition
  15717.  DBh CP/M, Concurrent CP/M, Concurrent DOS
  15718.  DBh CTOS (Convergent Technologies OS)
  15719.  E1h SpeedStor 12-bit FAT extended partition
  15720.  E4h SpeedStor 16-bit FAT extended partition
  15721.  F2h DOS 3.3+ secondary
  15722.  FEh LANstep
  15723.  FFh Xenix bad block table
  15724. ----------1A00-------------------------------
  15725. INT 1A - TIME - GET SYSTEM TIME
  15726.     AH = 00h
  15727. Return: CX:DX = number of clock ticks since midnight
  15728.     AL = midnight flag, nonzero if midnight passed since time last read
  15729. Notes:    there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs
  15730.     IBM and many clone BIOSes set the flag for AL rather than incrementing
  15731.       it, leading to loss of a day if two consecutive midnights pass
  15732.       without a request for the time (e.g. if the system is on but idle)
  15733. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch
  15734. ----------1A01-------------------------------
  15735. INT 1A - TIME - SET SYSTEM TIME
  15736.     AH = 01h
  15737.     CX:DX = number of clock ticks since midnight
  15738. SeeAlso: AH=00h,AH=03h,INT 21/AH=2Dh
  15739. ----------1A02-------------------------------
  15740. INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
  15741.     AH = 02h
  15742. Return: CF clear if successful
  15743.         CH = hour (BCD)
  15744.         CL = minutes (BCD)
  15745.         DH = seconds (BCD)    
  15746.         DL = daylight savings flag (00h standard time, 01h daylight time)
  15747.     CF set on error (i.e. clock not running or in middle of update)
  15748. SeeAlso: AH=00h
  15749. ----------1A03-------------------------------
  15750. INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
  15751.     AH = 03h
  15752.     CH = hour (BCD)
  15753.     CL = minutes (BCD)
  15754.     DH = seconds (BCD)
  15755.     DL = daylight savings flag (00h standard time, 01h daylight time)
  15756. SeeAlso: AH=01h
  15757. ----------1A04-------------------------------
  15758. INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
  15759.     AH = 04h
  15760. Return: CF clear if successful
  15761.         CH = century (BCD)
  15762.         CL = year (BCD)
  15763.         DH = month (BCD)
  15764.         DL = day (BCD)
  15765.     CF set on error
  15766. SeeAlso: AH=02h,AH=05h,INT 21/AH=2Ah
  15767. ----------1A05-------------------------------
  15768. INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
  15769.     AH = 05h
  15770.     CH = century (BCD)
  15771.     CL = year (BCD)
  15772.     DH = month (BCD)
  15773.     DL = day (BCD)
  15774. SeeAlso: AH=04h,INT 21/AH=2Bh
  15775. ----------1A06-------------------------------
  15776. INT 1A - TIME - SET ALARM (AT,XT286,PS)
  15777.     AH = 06h
  15778.     CH = hour (BCD)
  15779.     CL = minutes (BCD)
  15780.     DH = seconds (BCD)
  15781. Return: CF set on error (alarm already set or clock stopped for update)
  15782.     CF clear if successful
  15783. Note:    the alarm occurs every 24 hours until turned off, invoking INT 4A each
  15784.       time
  15785. SeeAlso: AH=07h,INT 4A
  15786. ----------1A07-------------------------------
  15787. INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
  15788.     AH = 07h
  15789. Return: alarm disabled
  15790. Note:    does not disable the real-time clock's IRQ
  15791. SeeAlso: AH=06h,INT 70
  15792. ----------1A08-------------------------------
  15793. INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
  15794.     AH = 08h
  15795.     CH = hours in BCD
  15796.     CL = minutes in BCD
  15797.     DH = seconds in BCD
  15798. ----------1A09-------------------------------
  15799. INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
  15800.     AH = 09h
  15801. Return: CH = hours in BCD
  15802.     CL = minutes in BCD
  15803.     DH = seconds in BCD
  15804.     DL = alarm status
  15805.         00h alarm not enabled
  15806.         01h alarm enabled but will not power up system
  15807.         02h alarm will power up system
  15808. ----------1A0A-------------------------------
  15809. INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
  15810.     AH = 0Ah
  15811. Return: CF set on error
  15812.     CF clear if successful
  15813.         CX = count of days since Jan 1,1980
  15814. SeeAlso: AH=04h,AH=0Bh
  15815. ----------1A0B-------------------------------
  15816. INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
  15817.     AH = 0Bh
  15818.     CX = count of days since Jan 1,1980
  15819. Return: CF set on error
  15820.     CF clear if successful
  15821. SeeAlso: AH=05h,AH=0Ah
  15822. ----------1A10-------------------------------
  15823. INT 1A - NEC PC-9800 series - PRINTER - INITIALIZE
  15824.     AH = 10h
  15825.     ???
  15826. Return: ???
  15827. SeeAlso: AH=11h,AH=12h,INT 17/AH=01h
  15828. ----------1A11-------------------------------
  15829. INT 1A - NEC PC-9800 series - PRINTER - OUTPUT CHARACTER
  15830.     AH = 11h
  15831.     ???
  15832. Return: ???
  15833. SeeAlso: AH=10h,AH=12h,INT 17/AH=00h
  15834. ----------1A12-------------------------------
  15835. INT 1A - NEC PC-9800 series - PRINTER - SENSE STATUS
  15836.     AH = 12h
  15837.     ???
  15838. Return: ???
  15839. SeeAlso: AH=10h,AH=11h,INT 17/AH=02h
  15840. ----------1A3601-----------------------------
  15841. INT 1A - WORD PERFECT v5.0 Third Party Interface - INSTALLATION CHECK
  15842.     AX = 3601h
  15843. Return: DS:SI = routine to monitor keyboard input, immediately preceded by the
  15844.         ASCIZ string "WPCORP\0"
  15845. Notes:    WordPerfect 5.0 will call this interrupt at start up to determine if a
  15846.       third party product wants to interface with it.  The third party
  15847.       product must intercept this interrupt and return the address of a
  15848.       keyboard monitor routine.
  15849.     Before checking for keyboard input, and after every key entered by the
  15850.       user, Word Perfect will call the routine whose address was provided
  15851.       in DS:SI with the following parameters:
  15852.         Entry:    AX = key code or 0
  15853.             BX = WordPerfect state flag
  15854.         Exit:    AX = 0 or key code
  15855.             BX = 0 or segment address of buffer with key codes
  15856.     See the "WordPerfect 5.0 Developer's Toolkit" for further information.
  15857. SeeAlso: INT 16/AX=5500h
  15858. ----------1A6108-----------------------------
  15859. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDWITHREPLY" - SEND MSG AND GET REPLY
  15860.     AX = 6108h
  15861.     STACK:    WORD    conversation ID (0000h-0009h)
  15862.         DWORD    pointer to message buffer
  15863.         WORD    length of message
  15864.         DWORD    pointer to reply buffer
  15865.         WORD    length of reply buffer
  15866.         WORD    0000h (use default "Cparams" structure)
  15867. Return: AX = status (see below)
  15868.     STACK unchanged
  15869. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  15870.       which implements the Simple Network Application Protocol
  15871. SeeAlso: AX=6205h
  15872.  
  15873. Values for status:
  15874.  0000h successful
  15875.  F830h "SNAP_ABORTED"
  15876.  FC04h "SNAP_SERVERDIED"
  15877.  FC05h "SNAP_RESEND"
  15878.  FC06h "SNAP_SELECTFAILED"
  15879.  FC07h "SNAP_WRONGVERSION"
  15880.  FC08h "SNAP_INVALIDACK"
  15881.  FC09h "SNAP_TIMEOUT"
  15882.  FC0Ah "SNAP_SERVERREJECT"
  15883.  FC0Bh "SNAP_NOREPLYDUE"
  15884.  FC0Ch "SNAP_NOAUTHENTICATE"/"SNAP_GUARDIAN_ERROR"
  15885.  FC0Dh "SNAP_NOINIT"
  15886.  FC0Eh "SNAP_SOCKETERROR"
  15887.  FC0Fh "SNAP_BUFFERLIMIT"
  15888.  FC10h "SNAP_INVALIDCID"
  15889.  FC11h "SNAP_INVALIDOP"
  15890.  FC12h "SNAP_XMITFAIL"
  15891.  FC13h "SNAP_NOMORERETRIES"
  15892.  FC14h "SNAP_BADPARMS"
  15893.  FC15h "SNAP_NOMEMORY"
  15894.  FC16h "SNAP_NOMORECONVS"
  15895.  FFFFh failed (invalid function/parameter)
  15896. ----------1A6205-----------------------------
  15897. INT 1A - SNAP.EXE 3.2+ - "SNAP_SENDNOREPLY" - SEND MSG, DON'T AWAIT REPLY
  15898.     AX = 6205h
  15899.     STACK:    WORD    conversation ID (0000h-0009h)
  15900.         DWORD    pointer to message
  15901.         WORD    length of message
  15902.         WORD    0000h (use default "Cparms" structure)
  15903. Return: AX = status (see AX=6108h)
  15904.     STACK unchanged
  15905. SeeAlso: AX=6108h
  15906. ----------1A6308-----------------------------
  15907. INT 1A - SNAP.EXE 3.2+ - "SNAP_BEGINCONV" - BEGIN CONVERSATION
  15908.     AX = 6308h
  15909.     STACK:    WORD    offset of ASCIZ "guardian"
  15910.         WORD    offset of ASCIZ hostname
  15911.         WORD    offset of ASCIZ server name
  15912.         WORD    offset of ASCIZ userid
  15913.         WORD    offset of ASCIZ password
  15914.         WORD    offset of password length
  15915.         WORD    offset of password type
  15916.         WORD    offset of "Cparms" structure (see below)
  15917. Return: ???
  15918.     STACK unchanged
  15919. Note:    all stacked offsets are within the SNAP data segment (use AX=6A01h
  15920.       to allocate a buffer)
  15921. SeeAlso: AX=6405h,AX=7202h
  15922.  
  15923. Format of Cparms structure:
  15924. Offset    Size    Description
  15925.  00h    WORD    retry delay in seconds
  15926.  02h    WORD    timeout delay in seconds
  15927.  04h    WORD    maximum buffer size
  15928.  06h    WORD    encryption level
  15929. ----------1A6405-----------------------------
  15930. INT 1A - SNAP.EXE 3.2+ - "SNAP_ENDCONV" - END CONVERSATION
  15931.     AX = 6405h
  15932.     STACK:    WORD    conversation ID (0000h-0009h)
  15933.         DWORD    pointer to message buffer
  15934.         WORD    length of message
  15935.         WORD    0000h (use default "Cparms" structure)
  15936. Return: AX = status (see AX=6108h)
  15937.     STACK unchanged
  15938. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  15939.       which implements the Simple Network Application Protocol
  15940. SeeAlso: AX=6308h
  15941. ----------1A6900-----------------------------
  15942. INT 1A - SNAP.EXE 3.2+ - "SNAP_DATASEG" - GET RESIDENT DATA SEGMENT
  15943.     AX = 6900h
  15944. Return: AX = value used for DS by resident code
  15945. SeeAlso: AX=6A01h,AX=6F01h
  15946. ----------1A6A01-----------------------------
  15947. INT 1A - SNAP.EXE 3.2+ - "SNAP_ALLOC" - ALLOCATE BUFFER IN SNAP DATA SEGMENT
  15948.     AX = 6A01h
  15949.     STACK:    WORD    number of bytes to allocate
  15950. Return: AX = offset of allocated buffer or 0000h if out of memory
  15951.     STACK unchanged
  15952. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  15953.       which implements the Simple Network Application Protocol
  15954. SeeAlso: AX=6B01h
  15955. ----------1A6B01-----------------------------
  15956. INT 1A - SNAP.EXE 3.2+ - "SNAP_FREE" - DEALLOCATE BUFFER IN SNAP DATA SEGMENT
  15957.     AX = 6B01h
  15958.     STACK:    WORD    offset within SNAP data segment of previously allocated
  15959.             buffer
  15960. Return:    STACK unchanged
  15961. Note:    this call is a NOP if the specified offset is 0000h
  15962. SeeAlso: AX=6A01h
  15963. ----------1A6C04-----------------------------
  15964. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYTO" - COPY DATA TO RESIDENT SNAP PACKAGE
  15965.     AX = 6C04h
  15966.     STACK:    WORD    offset within SNAP data segment of dest (nonzero)
  15967.         WORD    segment of source buffer
  15968.         WORD    offset of source buffer
  15969.         WORD    number of bytes to copy
  15970. Return: AX = offset of byte after last one copied to destination
  15971.     STACK unchanged
  15972. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  15973.       which implements the Simple Network Application Protocol
  15974. SeeAlso: AX=6D04h
  15975. ----------1A6D04-----------------------------
  15976. INT 1A - SNAP.EXE 3.2+ - "SNAP_COPYFROM" - COPY DATA FROM RESIDENT SNAP PACKAGE
  15977.     AX = 6D04h
  15978.     STACK:    WORD    offset within SNAP data segment of source buffer
  15979.         WORD    segment of destination buffer
  15980.         WORD    offset of destination buffer
  15981.         WORD    number of bytes to copy
  15982. Return: AX = offset of byte after last one copied from source
  15983.     buffer filled
  15984.     STACK unchanged
  15985. SeeAlso: AX=6C04h
  15986. ----------1A6E01-----------------------------
  15987. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETDEBUG" - SET ???
  15988.     AX = 6E01h
  15989.     STACK:    WORD    new value for ???
  15990. Return:    AX = old value of ???
  15991.     STACK unchanged
  15992. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  15993.       which implements the Simple Network Application Protocol
  15994. ----------1A6F01-----------------------------
  15995. INT 1A - SNAP.EXE 3.2+ - "SNAP_CHKINSTALL" - INSTALLATION CHECK
  15996.     AX = 6F01h
  15997.     STACK: WORD 0000h
  15998. Return: AX = status
  15999.         0000h SNAP is resident
  16000.         other SNAP not present
  16001.     STACK unchanged
  16002. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  16003.       which implements the Simple Network Application Protocol, and is
  16004.       required by PCVENUS (a network shell).  The combination of SNAP and
  16005.       PCVENUS allows the use of the Andrew File System as one or more
  16006.       networked drives.
  16007. SeeAlso: AX=6900h,AX=7400h
  16008. ----------1A7002-----------------------------
  16009. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETANCHOR"
  16010.     AX = 7002h
  16011.     STACK:    WORD    anchor number (0000h-0009h)
  16012.         WORD    new value for the anchor
  16013. Return: AX = status
  16014.         0000h successful
  16015.         FFFFh failed (top word on stack not in range 00h-09h)
  16016.     STACK unchanged
  16017. SeeAlso: AX=7101h
  16018. ----------1A7101-----------------------------
  16019. INT 1A - SNAP.EXE 3.2+ - "SNAP_GETANCHOR"
  16020.     AX = 7101h
  16021.     STACK:    WORD    anchor number (0000h-0009h)
  16022. Return:    AX = anchor's value
  16023.     STACK unchanged
  16024. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  16025.       which implements the Simple Network Application Protocol
  16026. SeeAlso: AX=7002h
  16027. ----------1A7202-----------------------------
  16028. INT 1A - SNAP.EXE 3.2+ - "SNAP_SETCONVPARMS" - SET CONVERSATION PARAMETERS
  16029.     AX = 7202h
  16030.     STACK:    WORD    conversation ID (0000h-0009h)
  16031.         WORD    offset within resident data segment of "Cparms"
  16032.             structure (see AX=6308h)
  16033. Return:    AX = status???
  16034.     STACK unchanged
  16035. SeeAlso: AX=6308h
  16036. ----------1A7302-----------------------------
  16037. INT 1A - SNAP.EXE 3.2+ - "SNAP_CLIENTVERSION" - ???
  16038.     AX = 7302h
  16039.     STACK:    WORD    conversation ID (0000h-0009h)
  16040.         WORD    offset within resident data segment of ???
  16041. Return:    AX = ???
  16042.     ???
  16043.     STACK unchanged
  16044. SeeAlso: AX=7400h
  16045. ----------1A7400-----------------------------
  16046. INT 1A - SNAP.EXE 3.2+ - "SNAP_VERSION" - GET VERSION
  16047.     AX = 7400h
  16048. Return: AX = version (AH=major, AL=minor)
  16049. Note:    this call is only valid if SNAP is installed
  16050. SeeAlso: AX=7302h,INT 1A/AX=6F01h
  16051. ----------1A75-------------------------------
  16052. INT 1A - SNAP.EXE 3.2+ - "SNAP_NOP" - ???
  16053.     AH = 75h
  16054.     AL = ???
  16055. Return: AX = ??? (0000h)
  16056. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  16057.       which implements the Simple Network Application Protocol
  16058. ----------1A76-------------------------------
  16059. INT 1A - SNAP.EXE 3.2+ - "SNAP_802_5" - ???
  16060.     AH = 76h
  16061.     AL = ???
  16062. Return: AX = ???
  16063. ----------1A77-------------------------------
  16064. INT 1A - SNAP.EXE 3.4 - ???
  16065.     AH = 77h
  16066.     AL = ??? (at least 01h)
  16067.     STACK:    WORD    ???
  16068.         ???
  16069. Return: ???
  16070.     STACK unchanged
  16071. ----------1A7802-----------------------------
  16072. INT 1A - SNAP.EXE 3.4 - ???
  16073.     AX = 7802h
  16074.     STACK:    WORD    ???
  16075.         WORD    ???
  16076. Return: ???
  16077.     STACK unchanged
  16078. Program: SNAP.EXE is a TSR written by IBM and Carnegie Mellon University
  16079.       which implements the Simple Network Application Protocol
  16080. ----------1A7F-------------------------------
  16081. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  16082.     AH = 7Fh
  16083.     ???
  16084. Return: ???
  16085. SeeAlso: AH=80h,AH=83h,AH=85h
  16086. ----------1A80-------------------------------
  16087. INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
  16088.     AH = 80h
  16089.     AL = 00h source is 8253 channel 2
  16090.          01h source is cassette input
  16091.          02h source is I/O channel "Audio IN"
  16092.          03h source is sound generator chip
  16093. SeeAlso: AH=7Fh,AH=83h
  16094. ----------1A8100-----------------------------
  16095. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND - INSTALLATION CHECK
  16096.     AX = 8100h
  16097. Return: AH > 80h if supported
  16098. ----------1A83-------------------------------
  16099. INT 1A - Tandy 2500, Tandy 1000L series - START PLAYING DIGITAL SOUND
  16100.     AH = 83h
  16101.     AL = volume (0=lowest, 7=highest)
  16102.     CX = number of bytes to play
  16103.     DX = time between sound samples (multiples of 273 nanoseconds)
  16104.     ES:BX -> sound data (array of 8-bit PCM samples)
  16105. Return: ???
  16106. Notes:    this call returns immediately while the sound plays in the
  16107.       background
  16108.     The sound data pointed to by ES:BX probably shouldn't cross a 64k
  16109.       boundary.  The BIOS appears to call INT 15/AX=91FBh when the sound
  16110.       device underflows to allow another INT 1A/AH=83h for seamless
  16111.       playing of long sounds.
  16112. SeeAlso: AH=84h,INT 15/AH=91h
  16113. ----------1A84-------------------------------
  16114. INT 1A - Tandy 2500, Tandy 1000L series - STOP PLAYING DIGITAL SOUND
  16115.     AH = 84h
  16116. Return: ???
  16117. SeeAlso: AH=83h,AH=85h
  16118. ----------1A85-------------------------------
  16119. INT 1A - Tandy 2500, Tandy 1000L series - DIGITAL SOUND???
  16120.     AH = 85h
  16121.     ???
  16122. Return: ???
  16123. SeeAlso: AH=7Fh,AH=83h
  16124. ----------1AA0-------------------------------
  16125. INT 1A - Disk Spool II v2.07 - INSTALLATION CHECK
  16126.     AH = A0h
  16127. Return: AH = B0h if installed
  16128.         AL = pending INT 1A/AH=D0h subfunction if nonzero???
  16129.         ES = code segment
  16130.         ES:BX -> name of current spool file
  16131.         ES:SI -> current despool file
  16132.         CL = 00h despooler is disabled
  16133.            = 41h despooler is enabled
  16134.         CH = 00h spooler is disabled
  16135.            = 41h spooler is enabled
  16136.         DL = 00h despooler is currently active printing a file
  16137.            = 41h despooler is standing by
  16138.         DH = 00h ???
  16139.            = 41h ???
  16140.         DI = 0000h ???
  16141.          0001h ???
  16142. Note:    Disk Spool II is a shareware disk-based print spooler by Budget
  16143.       Software Company
  16144. SeeAlso: AH=ABh,AH=C0h,AH=D0h
  16145. ----------1AAB-------------------------------
  16146. INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
  16147.     AH = ABh
  16148. Return:    AH = BAh if installed
  16149.         AL = pending INT 1A/AH=ADh subfunction if nonzero???
  16150.         ES = code segment
  16151.         ES:BX -> name of current spool file
  16152.         ES:SI -> current despool file
  16153.         CL = 00h despooler is disabled
  16154.            = 41h despooler is enabled
  16155.         CH = 00h spooler is disabled
  16156.            = 41h spooler is enabled
  16157.         DL = 00h despooler is currently active printing a file
  16158.            = 41h despooler is standing by
  16159.         DH = 00h ???
  16160.            = 41h ???
  16161.         DI = 0000h ???
  16162.          0001h ???
  16163. Note:    Disk Spool II is a shareware disk-based print spooler by Budget
  16164.       Software Company
  16165. SeeAlso: AH=A0h,AH=ACh,AH=ADh
  16166. ----------1AAC-------------------------------
  16167. INT 1A - Disk Spool II v1.83 - INSTALLATION CHECK
  16168.     AH = ACh
  16169. Return: (see AH=ABh)
  16170. Note:    this function is identical to AH=ABh
  16171. SeeAlso: AH=A0h,AH=ABh,AH=ADh
  16172. ----------1AAD-------------------------------
  16173. INT 1A - Disk Spool II v1.83 - FUNCTION CALLS
  16174.     AH = ADh
  16175.     AL = function code
  16176.         02h enable spooler only
  16177.         03h enable the despooler
  16178.         04h disable the despooler
  16179.         08h inhibit popup menu
  16180.         09h enable popup menu
  16181.         0Ah ???
  16182.         0Bh disable the spooler
  16183.         0Ch start despooler after last successfully printed document???
  16184.         0Dh start despooler at the exact point where it last left off???
  16185.         0Eh pop up the menu
  16186.         0Fh ???
  16187.         11h ???
  16188.         14h ???
  16189.         15h ???
  16190.         16h ???
  16191.         17h ???
  16192.         18h ???
  16193.         19h ???
  16194.         20h clear file pointed to by the despooler???
  16195.         21h    ???
  16196.         22h    ???
  16197.         23h ???
  16198.         30h ???
  16199. Return: AH = 00h if successful
  16200. SeeAlso: AH=ABh
  16201. ----------1AC0-------------------------------
  16202. INT 1A - Disk Spool II v2.07 - ALTERNATE INSTALLATION CHECK
  16203.     AH = C0h
  16204. Return: (see AH=A0h)
  16205. Note:    this call is identical to AH=A0h
  16206. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  16207. ----------1AD0-------------------------------
  16208. INT 1A - Disk Spool II v2.07 - FUNCTION CALLS
  16209.     AH = D0h
  16210.     AL = function code
  16211.         01h enable spooler and despooler
  16212.         02h enable spooler only
  16213.         03h enable despooler at beginning of file
  16214.         04h disable the despooler
  16215.         05h disable the despooler and spooler
  16216.         06h clear the spool file
  16217.         08h inhibit the popup menu
  16218.         09h enable the popup menu
  16219.         0Ah ??? (called by Disk Spool's INT 21 handler)
  16220.         0Bh disable the spooler
  16221.         0Ch start despooler after last successfully printed document
  16222.         0Dh start despooler at the exact point where it last left off
  16223.         0Eh pop up the menu
  16224.         0Fh ???
  16225.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  16226.             when a program terminates)
  16227.         14h ???
  16228.         15h delete despool file and reset ???
  16229.         16h ??? (writes something to unknown file)
  16230.         17h ??? (writes something to despool file, then reads something
  16231.             else and ???)
  16232.         18h ??? (reads something from despool file, and then ???)
  16233.         19h ??? (creates/truncates spool file)
  16234.         20h clear file pointed to by the despooler
  16235.         21h ??? (writes something to unknown file)
  16236.         22h ??? (writes something to spool file if spooler/despooler using
  16237.             same file)
  16238.         23h ??? (opens/creates unknown file, then ???)
  16239.         30h ???
  16240.         31h ???
  16241.         32h beep
  16242.         33h append CRLF to spool file???
  16243.         34h ???
  16244.         35h ???
  16245.         36h ???
  16246.         37h append CRLF to spool file and start a new spool file???
  16247.         38h ???
  16248.         51h ??? (called by Disk Spool's INT 21 handler)
  16249.         52h ??? (called by Disk Spool's INT 21 handler)
  16250.         57h ???
  16251. SeeAlso: AH=A0h,AH=ADh
  16252. ----------1AF7-------------------------------
  16253. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  16254.     AH = F7h
  16255. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  16256.       time to correct for clock drift
  16257.     any AH value from F0h-F7h or F9h-FEh will perform this function in
  16258.       version 1.1, but F7h is the function called by transient portion
  16259. SeeAlso: AH=F8h,AH=FFh"RighTime"
  16260. ----------1AF8-------------------------------
  16261. INT 1A - RighTime v1.1 - ENABLE
  16262.     AH = F8h
  16263. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  16264.       time to correct for clock drift
  16265.     RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  16266.       TeSseRact program identifier based on its current state: "RighTime"
  16267.       when enabled, "RighTim"F7h when disabled.
  16268. SeeAlso: AH=F7h,AH=FFh"RighTime"
  16269. ----------1AFE-------------------------------
  16270. INT 1A - AT&T 6300 - READ TIME AND DATE
  16271.     AH = FEh
  16272. Return: BX = day count (0 = Jan 1, 1984)
  16273.     CH = hour
  16274.     CL = minute
  16275.     DH = second
  16276.     DL = hundredths
  16277. SeeAlso: AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  16278. ----------1AFF-------------------------------
  16279. INT 1A - AT&T 6300 - SET TIME AND DATE
  16280.     AH = FFh
  16281.     BX = day count (0 = Jan 1, 1984)
  16282.     CH = hour
  16283.     CL = minute
  16284.     DH = second
  16285.     DL = hundredths
  16286. Return: ???
  16287. SeeAlso: AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  16288. ----------1AFF-------------------------------
  16289. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  16290.     AH = FFh
  16291. Notes:    RighTime is a TSR by G.T. Becker which continuously adjusts the system
  16292.       time to correct for clock drift
  16293.     upon being permanently disabled, RighTime closes the file handle
  16294.       referencing its executable (which is updated with time correction
  16295.       information every two minutes while RighTime is enabled).
  16296. ----------1B---------------------------------
  16297. INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
  16298. Desc:    this interrupt is automatically called when INT 09 determines that
  16299.       Control-Break has been pressed
  16300. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  16301.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  16302. SeeAlso: INT 23
  16303. ----------1C---------------------------------
  16304. INT 1C - TIME - SYSTEM TIMER TICK
  16305. Desc:    this interrupt is automatically called on each clock tick by the INT 08
  16306.       handler
  16307. Notes:    this is the preferred interrupt to chain when a program needs to be
  16308.       invoked regularly
  16309.     not available on NEC 9800-series PCs
  16310. SeeAlso: INT 08
  16311. ----------1D---------------------------------
  16312. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  16313. Note:    default parameter table at F000h:F0A4h for 100% compatible BIOSes
  16314. SeeAlso: INT 10/AH=00h
  16315.  
  16316. Format of video parameters:
  16317. Offset    Size    Description
  16318.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  16319.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  16320.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  16321.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  16322.  40h    WORD    bytes in video buffer for modes 00h and 01h
  16323.  42h    WORD    bytes in video buffer for modes 02h and 03h
  16324.  44h    WORD    bytes in video buffer for modes 04h and 05h
  16325.  46h    WORD    bytes in video buffer for modes 06h and 07h
  16326.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  16327.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  16328. ----------1E---------------------------------
  16329. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  16330. Note:    default parameter table at F000h:EFC7h for 100% compatible BIOSes
  16331. SeeAlso: INT 13/AH=0Fh,INT 41
  16332.  
  16333. Format of diskette parameter table:
  16334. Offset    Size    Description
  16335.  00h    BYTE    first specify byte
  16336.         bits 7-4: step rate
  16337.              3-0: head unload time (0Fh = 240 ms)
  16338.  01h    BYTE    second specify byte
  16339.         bits 7-1: head load time (01h = 4 ms)
  16340.                0: non-DMA mode (always 0)
  16341.  02h    BYTE    delay until motor turned off (in clock ticks)
  16342.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  16343.  04h    BYTE    sectors per track
  16344.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  16345.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  16346.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  16347.  08h    BYTE    format filler byte (default F6h)
  16348.  09h    BYTE    head settle time in milliseconds
  16349.  0Ah    BYTE    motor start time in 1/8 seconds
  16350. ----------1F---------------------------------
  16351. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  16352.    points at 1024 bytes of graphics data, 8 bytes for each character 80h-FFh
  16353. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  16354.       compatible BIOSes
  16355. SeeAlso: INT 10/AX=5000h,INT 43
  16356. ---------------------------------------------
  16357. Interrupt List, part 3 of 8
  16358. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  16359. ----------20---------------------------------
  16360. INT 20 - Minix - SEND/RECEIVE MESSAGE
  16361.     AX = process ID of other process
  16362.     BX -> message
  16363.     CX = 1 send
  16364.          2 receive
  16365.          3 send&receive
  16366. Note:    the message contains the system call number (numbered as in V7 
  16367.       Unix(tm)) and the call parameters
  16368. ----------20---------------------------------
  16369. INT 20 - DOS 1+ - TERMINATE PROGRAM
  16370.     CS = PSP segment
  16371. Return: never
  16372. Note:    (see INT 21/AH=00h)
  16373. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  16374. ---------------------------------------------
  16375. INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER
  16376.     ???
  16377. Return: ???
  16378. SeeAlso: INT 21"COMTROL HOSTESS"
  16379. ---------------------------------------------
  16380. INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE
  16381.     ???
  16382. Return: AX = first segment available for control program use
  16383. SeeAlso: INT 20"COMTROL HOSTESS",INT 22"COMTROL HOSTESS"
  16384. ----------2100-------------------------------
  16385. INT 21 - DOS 1+ - TERMINATE PROGRAM
  16386.     AH = 00h
  16387.     CS = PSP segment
  16388. Notes:    Microsoft recomments using INT 21/AH=4Ch for DOS 2+
  16389.     execution continues at address stored in INT 22 after DOS performs
  16390.       whatever cleanup it needs to do
  16391.     if the PSP is its own parent, the process's memory is not freed; if
  16392.       INT 22 additionally points into the terminating program, the
  16393.       process is effectively NOT terminated
  16394.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16395. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  16396. ----------2101-------------------------------
  16397. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  16398.     AH = 01h
  16399. Return: AL = character read
  16400. Notes:    ^C/^Break are checked, and INT 23 executed if read
  16401.     character is echoed to standard output
  16402.     standard input is always the keyboard and standard output the screen
  16403.       under DOS 1.x, but they may be redirected under DOS 2+
  16404. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  16405. ----------2102-------------------------------
  16406. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  16407.     AH = 02h
  16408.     DL = character to write
  16409. Return: AL = last character output (despite the official docs which state
  16410.         nothing is returned) (at least DOS 3.3-5.0)
  16411. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  16412.     standard output is always the screen under DOS 1.x, but may be
  16413.       redirected under DOS 2+
  16414.     the last character output will be the character in DL unless DL=09h
  16415.       on entry, in which case AL=20h as tabs are expanded to blanks
  16416. SeeAlso: AH=06h,AH=09h
  16417. ----------2103-------------------------------
  16418. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  16419.     AH = 03h
  16420. Return: AL = character read
  16421. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  16422.     STDAUX is usually the first serial port
  16423. SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
  16424. ----------2104-------------------------------
  16425. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  16426.     AH = 04h
  16427.     DL = character to write
  16428. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  16429.     STDAUX is usually the first serial port
  16430.     if STDAUX is busy, this function will wait until it becomes free
  16431. SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
  16432. ----------2105-------------------------------
  16433. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  16434.     AH = 05h
  16435.     DL = character to print
  16436. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  16437.     STDPRN is usually the first parallel port, but may be redirected under
  16438.       DOS 2+
  16439.     if the printer is busy, this function will wait
  16440. SeeAlso: INT 17/AH=00h
  16441. ----------2106-------------------------------
  16442. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  16443.     AH = 06h
  16444.     DL = character (except FFh)
  16445. Return: AL = character output (despite official docs which state nothing is
  16446.         returned) (at least DOS 3.3-5.0)
  16447. Notes:    does not check ^C/^Break
  16448.     writes to standard output, which is always the screen under DOS 1.x,
  16449.       but may be redirected under DOS 2+
  16450. SeeAlso: AH=02h,AH=09h
  16451. ----------2106--DLFF-------------------------
  16452. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  16453.     AH = 06h
  16454.     DL = FFh
  16455. Return: ZF set if no character available
  16456.     ZF clear if character available
  16457.         AL = character read
  16458. Notes:    ^C/^Break are NOT checked
  16459.     if the returned character is 00h, the user pressed a key with an
  16460.       extended keycode, which will be returned by the next call of this
  16461.       function
  16462.     reads from standard input, which is always the keyboard under DOS 1.x,
  16463.       but may be redirected under DOS 2+
  16464. SeeAlso: AH=0Bh
  16465. ----------2107-------------------------------
  16466. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  16467.     AH = 07h
  16468. Return: AL = character read from standard input
  16469. Notes:    does not check ^C/^Break
  16470.     standard input is always the keyboard under DOS 1.x, but may be
  16471.       redirected under DOS 2+
  16472.     if the interim console flag is set (see AX=6301h), partially-formed
  16473.       double-byte characters may be returned
  16474. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  16475. ----------2108-------------------------------
  16476. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  16477.     AH = 08h
  16478. Return: AL = character read from standard input
  16479. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  16480.     standard input is always the keyboard under DOS 1.x, but may be
  16481.       redirected under DOS 2+
  16482.     if the interim console flag is set (see AX=6301h), partially-formed
  16483.       double-byte characters may be returned
  16484. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  16485. ----------2109-------------------------------
  16486. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  16487.     AH = 09h
  16488.     DS:DX -> '$'-terminated string
  16489. Return: AL = 24h (the '$' terminating the string, despite official docs which
  16490.         state that nothing is returned) (at least DOS 3.3-5.0)
  16491. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  16492.     standard output is always the screen under DOS 1.x, but may be
  16493.       redirected under DOS 2+
  16494.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  16495. SeeAlso: AH=02h,AH=06h"OUTPUT"
  16496. ----------210A-------------------------------
  16497. INT 21 - DOS 1+ - BUFFERED INPUT
  16498.     AH = 0Ah
  16499.     DS:DX -> buffer (see below)
  16500. Return: buffer filled with user input
  16501. Notes:    ^C/^Break are checked, and INT 23 is called if either detected
  16502.     reads from standard input, which may be redirected under DOS 2+
  16503.     if the maximum buffer size (see below) is set to 00h, this call returns
  16504.       immediately without reading any input
  16505. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  16506.  
  16507. Format of input buffer:
  16508. Offset    Size    Description
  16509.  00h    BYTE    maximum characters buffer can hold
  16510.  01h    BYTE    (input) number of chars from last input which may be recalled
  16511.         (return) number of characters actually read, excluding CR
  16512.  02h  N BYTEs    actual characters read, including the final carriage return
  16513. ----------210A00-----------------------------
  16514. INT 21 - WCED v1.6 - INSTALLATION CHECK
  16515.     AX = 0A00h
  16516.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  16517. Return: buffer offset 02h-05h filled with "Wced" if installed
  16518. Note:    WCED is a free command-line editor and history utility by Stuart
  16519.       Russell
  16520. SeeAlso: AH=FFh"CED"
  16521. ----------210B-------------------------------
  16522. INT 21 - DOS 1+ - GET STDIN STATUS
  16523.     AH = 0Bh
  16524. Return: AL = 00h if no character available
  16525.        = FFh if character is available
  16526. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  16527.     standard input is always the keyboard under DOS 1.x, but may be
  16528.       redirected under DOS 2+
  16529.     if the interim console flag is set (see AX=6301h), this function
  16530.       returns AL=FFh if a partially-formed double-byte character is
  16531.       available
  16532. SeeAlso: AH=06h"INPUT",AX=4406h
  16533. ----------210B56-----------------------------
  16534. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  16535.     AX = 0B56h
  16536. Return: AX = 4952h if resident
  16537. SeeAlso: AX=0D20h
  16538. ----------210C-------------------------------
  16539. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  16540.     AH = 0Ch
  16541.     AL = STDIN input function to execute after flushing buffer
  16542.     other registers as appropriate for the input function
  16543. Return: as appropriate for the specified input function
  16544. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  16545.       no input is attempted
  16546. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  16547. ----------210D-------------------------------
  16548. INT 21 - DOS 1+ - DISK RESET
  16549.     AH = 0Dh
  16550. Notes:    writes all modified disk buffers to disk, but does not update directory
  16551.       information (that is only done when files are closed or a SYNC call
  16552.       is issued)
  16553. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  16554. ----------210D20-----------------------------
  16555. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  16556.     AX = 0D20h
  16557. Return: AX = 1971h if resident
  16558. SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
  16559. ----------210E-------------------------------
  16560. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  16561.     AH = 0Eh
  16562.     DL = new default drive (00h = A:, 01h = B:, etc)
  16563. Return: AL = number of potentially valid drive letters
  16564. Notes:    under Novell NetWare, the return value is always 32, the number of
  16565.       drives that NetWare supports
  16566.     under DOS 3+, the return value is the greatest of 5, the value of
  16567.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  16568.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  16569.       may be accessed as either A: or B:
  16570.     otherwise, the return value is the highest drive actually present
  16571.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  16572.       and 3+ a maximum of 26 drives
  16573. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  16574. ----------210F-------------------------------
  16575. INT 21 - DOS 1+ - OPEN FILE USING FCB
  16576.     AH = 0Fh
  16577.     DS:DX -> unopened File Control Block (see below)
  16578. Return: AL = status
  16579.         00h successful
  16580.         FFh file not found or access denied
  16581. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  16582.     an unopened FCB has the drive, filename, and extension fields filled
  16583.       in and all other bytes cleared
  16584.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16585. SeeAlso: AH=10h,AH=16h,AH=3Dh
  16586.  
  16587. Format of File Control Block:
  16588. Offset    Size    Description
  16589.  -7    BYTE    extended FCB if FFh
  16590.  -6   5 BYTEs    reserved
  16591.  -1    BYTE    file attribute if extended FCB
  16592.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  16593.  01h  8 BYTEs    blank-padded file name 
  16594.  09h  3 BYTEs    blank-padded file extension
  16595.  0Ch    WORD    current block number
  16596.  0Eh    WORD    logical record size
  16597.  10h    DWORD    file size
  16598.  14h    WORD    date of last write (see AX=5700h)
  16599.  16h    WORD    time of last write (see AX=5700h) (DOS 1.1+)
  16600.  18h  8 BYTEs    reserved (see below)
  16601.  20h    BYTE    record within current block
  16602.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  16603.         byte is omitted)
  16604. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  16605.       offset -7, rather than the address of the drive number field
  16606.  
  16607. Format of reserved field for DOS 1.0:
  16608. Offset    Size    Description
  16609.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  16610.         ID)
  16611.  18h    WORD    number of first cluster in file
  16612.  1Ah    WORD    current absolute cluster number on disk
  16613.  1Ch    WORD    current relative cluster number within file
  16614.         (0 = first cluster of file, 1 = second cluster, etc.)
  16615.  1Eh    BYTE    dirty flag (00h = not dirty)
  16616.  1Fh    BYTE    unused
  16617.  
  16618. Format of reserved field for DOS 1.10-1.25:
  16619. Offset    Size    Description
  16620.  18h    BYTE    bit 7: set if logical device
  16621.         bit 6: not dirty
  16622.         bits 5-0: disk number or logical device ID
  16623.  19h    WORD    starting cluster number on disk
  16624.  1Bh    WORD    current absolute cluster number on disk
  16625.  1Dh    WORD    current relative cluster number within file
  16626.  1Fh    BYTE    unused
  16627.  
  16628. Format of reserved field for DOS 2.x:
  16629. Offset    Size    Description
  16630.  18h    BYTE    bit 7: set if logical device
  16631.         bit 6: set if open???
  16632.         bits 5-0: ???
  16633.  19h    WORD    starting cluster number on disk
  16634.  1Bh    WORD    ???
  16635.  1Dh    BYTE    ???
  16636.  1Eh    BYTE    ???
  16637.  1Fh    BYTE    ???
  16638.  
  16639. Format of reserved field for DOS 3.x:
  16640. Offset    Size    Description
  16641.  18h    BYTE    number of system file table entry for file
  16642.  19h    BYTE    attributes
  16643.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  16644.               01 = SHARE.EXE not loaded, character device
  16645.               10 = SHARE.EXE loaded, remote file
  16646.               11 = SHARE.EXE loaded, local file
  16647.         bits 5-0: low six bits of device attribute word
  16648. ---SHARE.EXE loaded, local file (DOS 3.x and 5.0)---
  16649.  1Ah    WORD    starting cluster of file on disk
  16650.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record (see AH=52h)
  16651.         (DOS 5.0) unique sequence number of sharing record
  16652.  1Eh    BYTE    file attribute
  16653.  1Fh    BYTE    ???
  16654. ---SHARE.EXE loaded, remote file---
  16655.  1Ah    WORD    number of sector containing directory entry
  16656.  1Ch    WORD    relative cluster within file of last cluster accessed
  16657.  1Eh    BYTE    absolute cluster number of last cluster accessed
  16658.  1Fh    BYTE    ???
  16659. ---SHARE.EXE not loaded---
  16660.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  16661.  1Bh    WORD    starting cluster of file
  16662.  1Dh    WORD    number of sector containing directory entry
  16663.  1Fh    BYTE    number of directory entry within sector
  16664. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  16665.       of the device driver header, then the BYTE at 1Ah is overwritten.
  16666. ----------2110-------------------------------
  16667. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  16668.     AH = 10h
  16669.     DS:DX -> File Control Block (see AH=0Fh)
  16670. Return: AL = status
  16671.         00h successful
  16672.         FFh failed
  16673. Notes:    a successful close forces all disk buffers used by the file to be
  16674.       written and the directory entry to be updated
  16675.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16676. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  16677. ----------2111-------------------------------
  16678. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  16679.     AH = 11h
  16680.     DS:DX -> unopened FCB (see AH=0Fh), may contain '?' wildcards
  16681. Return: AL = status
  16682.         00h successful
  16683.         [DTA] unopened FCB for first matching file
  16684.         FFh no matching filename, or bad FCB
  16685. Notes:    the type of the returned FCB depends on whether the input FCB was a
  16686.       normal or an extended FCB
  16687.     for extended FCBs with search attribute 08h, the volume label (if any)
  16688.       will be returned even if the current directory is not the root dir.
  16689.     DOS 3+ also allows the '*' wildcard
  16690.     the search FCB must not be modified if AH=12h will be used to continue
  16691.       searching; DOS 3.3 has set the following parts of the FCB:
  16692.          0Ch    BYTE    ???
  16693.          0Dh    WORD    directory entry number of matching file
  16694.          0Fh    WORD    cluster number of current directory
  16695.          11h  4 BYTEs    ???
  16696.          15h    BYTE    drive number (1=A:)
  16697.     at least for DOS 3.3, the unopened FCB in the DTA is actually the drive
  16698.       number followed by the file's directory entry
  16699. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  16700. ----------2112-------------------------------
  16701. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  16702.     AH = 12h
  16703.     DS:DX -> unopened FCB (see AH=0Fh)
  16704. Return: AL = status
  16705.         00h successful
  16706.         [DTA] = unopened FCB
  16707.         FFh no more matching filenames
  16708. Note:    (see AH=11h)
  16709.     assumes that successful FindFirst executed on search FCB before call
  16710. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  16711. ----------2113-------------------------------
  16712. INT 21 - DOS 1+ - DELETE FILE USING FCB
  16713.     AH = 13h
  16714.     DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for
  16715.         deletion ('?' wildcards allowed)
  16716. Return: AL = status
  16717.         00h one or more files successfully deleted
  16718.         FFh no matching files or all were read-only or locked
  16719. Notes:    DOS 1.25+ deletes everything in the current directory (including
  16720.       subdirectories) and sets the first byte of the name to 00h (entry
  16721.       never used) instead of E5h if called on an extended FCB with
  16722.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  16723.       2 for DOS 1.x).  This may have originally been an optimization to
  16724.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  16725.       the directory search upon encountering a never-used entry), but can
  16726.       corrupt the filesystem under DOS 2+ because subdirectories are
  16727.       removed without deleting the files they contain.
  16728.     currently-open files should not be deleted
  16729. SeeAlso: AH=41h,INT 2F/AX=1113h
  16730. ----------2114-------------------------------
  16731. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  16732.     AH = 14h
  16733.     DS:DX -> opened FCB (see AH=0Fh)
  16734. Return: AL = status
  16735.         00h successful
  16736.         01h end of file (no data)
  16737.         02h segment wrap in DTA
  16738.         03h end of file, partial record read
  16739.     [DTA] = record read from file
  16740. Notes:    reads a record of the size specified in the FCB beginning at the
  16741.       current file position, then updates the current block and current
  16742.       record fields in the FCB
  16743.     if a partial record was read, it is zero-padded to the full size
  16744.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16745. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
  16746. ----------2115-------------------------------
  16747. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  16748.     AH = 15h
  16749.     DS:DX -> opened FCB (see AH=0Fh)
  16750.     [DTA] = record to write
  16751. Return: AL = status
  16752.         00h successful
  16753.         01h disk full
  16754.         02h segment wrap in DTA
  16755. Notes:    writes a record of the size specified in the FCB beginning at the
  16756.       current file position, then updates the current block and current
  16757.       record fields in the FCB
  16758.     if less than a full sector is written, the data is placed in a DOS
  16759.       buffer to be written out at a later time
  16760.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16761. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  16762. ----------2116-------------------------------
  16763. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  16764.     AH = 16h
  16765.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  16766. Return: AL = status
  16767.         00h successful
  16768.         FFh directory full or file exists and is read-only or locked
  16769. Notes:    if file already exists, it is truncated to zero length
  16770.     if an extended FCB is used, the file is given the attribute in the
  16771.       FCB; this is how to create a volume label in the disk's root dir
  16772.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16773. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  16774. ----------2117-------------------------------
  16775. INT 21 - DOS 1+ - RENAME FILE USING FCB
  16776.     AH = 17h
  16777.     DS:DX -> modified FCB (see also AH=0Fh)
  16778.         the old filename ('?' wildcards OK) is in the standard location
  16779.         while the new filename ('?' wildcards OK) is stored in the 11
  16780.         bytes beginning at offset 11h
  16781. Return:    AL = status
  16782.         00h successfully renamed
  16783.         FFh no matching files,file is read-only, or new name already exists
  16784. Note:    subdirectories may be renamed using an extended FCB with the
  16785.       appropriate attribute, as may volume labels
  16786. SeeAlso: AH=0Fh,AH=13h,AH=56h,INT 2F/AX=1111h
  16787. ----------2118-------------------------------
  16788. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  16789.     AH = 18h
  16790. Return: AL = 00h
  16791. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  16792.       which is meaningless under MSDOS
  16793. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h
  16794. ----------2119-------------------------------
  16795. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  16796.     AH = 19h
  16797. Return: AL = drive (00h = A:, 01h = B:, etc)
  16798. SeeAlo: AH=0Eh,AH=47h
  16799. ----------211A-------------------------------
  16800. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  16801.     AH = 1Ah
  16802.     DS:DX -> Disk Transfer Area (DTA)
  16803. Notes:    the DTA is set to PSP:0080h when a program is started
  16804.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  16805. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  16806. ----------211B-------------------------------
  16807. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  16808.     AH = 1Bh
  16809. Return: AL = sectors per cluster (allocation unit)
  16810.     CX = bytes per sector
  16811.     DX = total number of clusters
  16812.     DS:BX -> media ID byte (see below)
  16813. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  16814.       versions return a pointer to a copy of the FAT's ID byte
  16815. SeeAlso: AH=1Ch,AH=36h
  16816.  
  16817. Values for media ID byte:
  16818.  FFh    floppy, double-sided, 8 sectors per track (320K)
  16819.  FEh    floppy, single-sided, 8 sectors per track (160K)
  16820.  FDh    floppy, double-sided, 9 sectors per track (360K)
  16821.  FCh    floppy, single-sided, 9 sectors per track (180K)
  16822.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  16823.  F8h    hard disk
  16824.  F0h    other
  16825. ----------211C-------------------------------
  16826. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  16827.     AH = 1Ch
  16828.     DL = drive (00h = default, 01h = A:, etc)
  16829. Return: AL = sectors per cluster (allocation unit)
  16830.     CX = bytes per sector
  16831.     DX = total number of clusters
  16832.     DS:BX -> media ID byte (see AH=1Bh)
  16833. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  16834.       versions return a pointer to a copy of the FAT's ID byte
  16835. SeeAlso: AH=1Bh,AH=36h
  16836. ----------211D-------------------------------
  16837. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  16838.     AH = 1Dh
  16839. Return: AL = 00h
  16840. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  16841.       drives", which is meaningless under MSDOS
  16842. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  16843. ----------211E-------------------------------
  16844. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  16845.     AH = 1Eh
  16846. Return: AL = 00h
  16847. Note:    corresponds to the CP/M BDOS function "set file attributes" which was
  16848.      meaningless under MSDOS 1.x
  16849. SeeAlso: AH=18h,AH=1Dh,AH=20h
  16850. ----------211F-------------------------------
  16851. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  16852.     AH = 1Fh
  16853. Return: AL = status
  16854.         00h successful
  16855.         DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x,
  16856.             AH=32h for DOS 2+)
  16857.         FFh invalid drive
  16858. Note:    this call was undocumented prior to the release of DOS 5.0; however,
  16859.       only the DOS 4+ version of the DPB has been documented
  16860. SeeAlso: AH=32h
  16861.  
  16862. Format of DOS 1.1 and MSDOS 1.25 drive parameter block:
  16863. Offset    Size    Description
  16864.  00h    BYTE    sequential device ID
  16865.  01h    BYTE    logical drive number (0=A:)
  16866.  02h    WORD    bytes per sector
  16867.  04h    BYTE    highest sector number within a cluster
  16868.  05h    BYTE    shift count to convert clusters into sectors
  16869.  06h    WORD    starting sector number of first FAT
  16870.  08h    BYTE    number of copies of FAT
  16871.  09h    WORD    number of directory entries
  16872.  0Bh    WORD    number of first data sector
  16873.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  16874.  0Fh    BYTE    sectors per FAT
  16875.  10h    WORD    starting sector of directory
  16876.  12h    WORD    address of allocation table
  16877. Note:    the DOS 1.0 table is the same except that the first and last fields
  16878.       are missing; see INT 21/AH=32h for the DOS 2+ version
  16879. ----------2120-------------------------------
  16880. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  16881.     AH = 20h
  16882. Return: AL = 00h
  16883. Note:    corresponds to the CP/M BDOS function "get/set default user
  16884.       (sublibrary) number", which is meaningless under MSDOS
  16885. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  16886. ----------2121-------------------------------
  16887. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  16888.     AH = 21h
  16889.     DS:DX -> opened FCB (see AH=0Fh)
  16890. Return: AL = status
  16891.         00h successful    
  16892.         01h end of file, no data read
  16893.         02h segment wrap in DTA, no data read
  16894.         03h end of file, partial record read
  16895.     [DTA] = record read from file
  16896. Notes:    the record is read from the current file position as specified by the
  16897.       random record and record size fields of the FCB
  16898.     the file position is not updated after reading the record
  16899.     if a partial record is read, it is zero-padded to the full size
  16900.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16901. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
  16902. ----------2122-------------------------------
  16903. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  16904.     AH = 22h
  16905.     DS:DX -> opened FCB (see AH=0Fh)
  16906.     [DTA] = record to write
  16907. Return: AL = status
  16908.         00h successful
  16909.         01h disk full
  16910.         02h segment wrap in DTA
  16911. Notes:    the record is written to the current file position as specified by the
  16912.       random record and record size fields of the FCB
  16913.     the file position is not updated after writing the record
  16914.     if the record is located beyond the end of the file, the file is
  16915.       extended but the intervening data remains uninitialized
  16916.     if the record only partially fills a disk sector, it is copied to a
  16917.       DOS disk buffer to be written out to disk at a later time
  16918.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16919. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  16920. ----------2123-------------------------------
  16921. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  16922.     AH = 23h
  16923.     DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
  16924. Return: AL = status
  16925.         00h successful (matching file found)
  16926.         FCB random record field filled with size in records, rounded up
  16927.         to next full record
  16928.         FFh failed (no matching file found)
  16929. Note:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16930. SeeAlso: AH=42h
  16931. ----------2124-------------------------------
  16932. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  16933.     AH = 24h
  16934.     DS:DX -> opened FCB (see AH=0Fh)
  16935. Notes:    computes the random record number corresponding to the current record
  16936.       number and record size, then stores the result in the FCB
  16937.     normally used when switching from sequential to random access
  16938.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  16939. SeeAlso: AH=21h,AH=27h,AH=42h
  16940. ----------2125-------------------------------
  16941. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  16942.     AH = 25h
  16943.     AL = interrupt number
  16944.     DS:DX -> new interrupt handler
  16945. Notes:    this function is preferred over direct modification of the interrupt
  16946.       vector table
  16947.     some DOS extenders place an API on this function, as it is not
  16948.       directly meaningful in protected mode
  16949. SeeAlso: AX=2501h,AH=35h
  16950. ----------212501-----------------------------
  16951. INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES 
  16952.     AX = 2501h
  16953.     SS = application's original SS or DS (FlashTek X-32VM)
  16954. Return: CF clear if successful
  16955.     CF set on error
  16956.         caller is operating on X-32 stack (FlashTek X-32VM)
  16957. Notes:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  16958.       system calls.     Only available when directly using 386/DOS-Extender or
  16959.       a compatible DOS extender, or when using a product that was created
  16960.       using 386-DOS/Extender or a compatible
  16961.     this function is also supported by FlashTek X-32VM
  16962. SeeAlso: AH=30h"Phar Lap"
  16963. ----------212502-----------------------------
  16964. INT 21 - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  16965.     AX = 2502h
  16966.     CL = interrupt number
  16967. Return:    CF clear
  16968.     ES:EBX = CS:EIP of protected-mode interrupt handler
  16969. Note:    this function is also supported by FlashTek X-32VM
  16970. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  16971. ----------212503-----------------------------
  16972. INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  16973.     AX = 2503h
  16974.     CL = interrupt number
  16975. Return: CF clear
  16976.     EBX = CS:IP of real-mode interrupt handler
  16977. Note:    this function is also supported by FlashTek X-32VM
  16978. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  16979. ----------212504-----------------------------
  16980. INT 21 - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  16981.     AX = 2504h
  16982.     CL = interrupt number
  16983.     DS:EDX = CS:EIP of protected-mode interrupt handler
  16984. Return: CF clear
  16985. Note:    this function is also supported by FlashTek X-32VM
  16986. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  16987. ----------212505-----------------------------
  16988. INT 21 - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  16989.     AX = 2505h
  16990.     CL = interrupt number
  16991.     EBX = CS:IP of real-mode interrupt handler
  16992. Return: CF clear
  16993. Note:    this function is also supported by FlashTek X-32VM
  16994. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  16995. ----------212506-----------------------------
  16996. INT 21 - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CONTRL IN PROT MODE
  16997.     AX = 2506h
  16998.     CL = interrupt number
  16999.     DS:EDX = CS:EIP of protected-mode interrupt handler
  17000. Return: CF clear
  17001. Notes:    this function modifies both the real-mode low-memory interrupt
  17002.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  17003.     interrupts occurring in real mode are resignaled in protected mode
  17004.     this function is also supported by FlashTek X-32VM
  17005. ----------212507-----------------------------
  17006. INT 21 - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  17007.     AX = 2507h
  17008.     CL = interrupt numbern
  17009.     DS:EDX = CS:EIP of protected-mode interrupt handler
  17010.     EBX = CS:IP of real-mode interrupt handler
  17011. Return: CF clear
  17012. Notes:    interrupts are disabled until both vectors have been modified
  17013.     this function is also supported by FlashTek X-32VM
  17014. SeeAlso: AX=2504h,AX=2505h
  17015. ----------212508-----------------------------
  17016. INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  17017.     AX = 2508h
  17018.     BX = segment selector
  17019. Return: CF clear if successful
  17020.         ECX = linear base address of segment
  17021.     CF set if invalid segment selector
  17022. Note:    this function is also supported by FlashTek X-32VM
  17023. SeeAlso: AX=2509h
  17024. ----------212509-----------------------------
  17025. INT 21 - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  17026.     AX = 2509h
  17027.     EBX = linear address to convert
  17028. Return: CF clear if successful
  17029.         ECX = physical address (carry flag clear)
  17030.     CF set if linear address not mapped in page tables
  17031. SeeAlso: AX=2508h
  17032. ----------212509-----------------------------
  17033. INT 21 - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
  17034.     AX = 2509h
  17035. Return: CF clear
  17036.     EAX high word = default DS
  17037.     AX = alias for 16-bit data segment
  17038.     BX = real mode code segment
  17039.     EDX high word = selector covering full 4GB address space
  17040.     DX = default SS
  17041.     ESI high word = PSP selector
  17042.     SI = environment selector
  17043. ----------21250A-----------------------------
  17044. INT 21 - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  17045.     AX = 250Ah
  17046.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  17047.          to modify
  17048.     EBX = physical base address of memory to map (multiple of 4K)
  17049.     ECX = number of physical 4K pages to map
  17050. Return: CF clear if successful
  17051.         EAX = 32-bit offset in segment of mapped memory
  17052.     CF set on error
  17053.         EAX = error code
  17054.         08h insufficient memory to create page tables
  17055.         09h invalid segment selector
  17056. SeeAlso: INT 31/AX=0800h
  17057. ----------21250C-----------------------------
  17058. INT 21 - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  17059.     AX = 250Ch
  17060. Return: CF clear
  17061.     AL = base interrupt vector for IRQ0-IRQ7
  17062.     AH = base interrupt vector for IRQ8-IRQ15
  17063.     BL = interrupt vector for BIOS print screen function (Phar Lap only)
  17064. Note:    this function is also supported by FlashTek X-32VM
  17065. SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
  17066. ----------21250D-----------------------------
  17067. INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  17068.     AX = 250Dh
  17069. Return: CF clear
  17070.     EAX = CS:IP of real-mode callback procedure that will call through
  17071.         from real mode to a protected-mode routine
  17072.     EBX = 32-bit real-mode address of intermode call data buffer
  17073.     ECX = size in bytes of intermode call data buffer
  17074.     ES:EDX = protected-mode address of intermode call data buffer
  17075. Notes:    this function is also supported by FlashTek X-32VM
  17076.     X-32VM guarantees the intermode buffer to be at least 4 KB
  17077. SeeAlso: AX=250Eh
  17078.  
  17079. Call real-mode callback with:
  17080.     STACK:    DWORD    offset to protected-mode code
  17081.         WORD    placeholder for protected-mode CS
  17082.         DWORD    pointer to selector structure (see below)
  17083.             or 0000h:0000h for defaults
  17084.         var    parameters for protected-mode procedure
  17085. Return: via FAR return
  17086.  
  17087. Format of selector structure:
  17088. Offset    Size    Description
  17089.  00h    WORD    protected-mode GS selector
  17090.  02h    WORD    protected-mode FS selector
  17091.  04h    WORD    protected-mode ES selector
  17092.  06h    WORD    protected-mode DS selector
  17093. ----------21250E-----------------------------
  17094. INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  17095.     AX = 250Eh
  17096.     EBX = CS:IP of real-mode procedure to call
  17097.     ECX = number of two-byte words to copy from protected-mode stack
  17098.           to real-mode stack
  17099. Return: CF clear if successful
  17100.         all segment registers unchanged
  17101.         all general registers contain values set by real-mode procedure
  17102.         all other flags set as they were left by real-mode procedure
  17103.         stack unchanged
  17104.     CF set on error
  17105.         EAX = error code
  17106.         01h not enough real-mode stack space
  17107. Note:    this function is also supported by FlashTek X-32VM; under X-32VM, the
  17108.       call will fail if ECX > 0000003Fh
  17109. SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
  17110. ----------21250F-----------------------------
  17111. INT 21 - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  17112.     AX = 250Fh
  17113.     ES:EBX = 48-bit protected-mode address to convert
  17114. Return: CF clear if successful (address < 1MB)
  17115.         ECX = 32-bit real-mode MS-DOS address
  17116.     CF set on error (address >= 1MB)
  17117.         ECX = linear address
  17118. Note:    this function is also supported by FlashTek X-32VM
  17119. SeeAlso: AX=2510h
  17120. ----------212510-----------------------------
  17121. INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  17122.     AX = 2510h
  17123.     EBX = CS:IP of real-mode procedure to call
  17124.     ECX = number of two-byte words to copy to protected-mode stack to
  17125.           real-mode stack
  17126.     DS:EDX -> pointer to parameter block (see below)
  17127. Return: CF clear if successful
  17128.         all segment registers unchanged,
  17129.         EDX unchanged
  17130.         all other general registers contain values set by real-mode proc
  17131.         all other flags are set as they were left by real-mode procedure
  17132.         real-mode register values are returned in the parameter block
  17133.     CF set on error
  17134.         EAX = error code
  17135.         01h not enough real-mode stack space
  17136. Note:    unlike most of the preceding 25xxh functions, this one is not
  17137.       supported by FlashTek X-32VM
  17138. SeeAlso: AX=250Eh,AX=250Fh
  17139.  
  17140. Format of parameter block:
  17141. Offset    Size    Description
  17142.  00h    WORD    real-mode DS value
  17143.  02h    WORD    real-mode ES value
  17144.  04h    WORD    real-mode FS value
  17145.  06h    WORD    real-mode GS value
  17146.  08h    DWORD    real-mode EAX value
  17147.  0Ch    DWORD    real-mode EBX value
  17148.  10h    DWORD    real-mode ECX value
  17149.  14h    DWORD    real-mode EDX value
  17150. ----------212511-----------------------------
  17151. INT 21 - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  17152.     AX = 2511h
  17153.     DS:EDX -> parameter block (see below)
  17154. Return: all segment registers unchanged
  17155.     EDX unchanged
  17156.     all other registers contain values set by the real-mode int handler
  17157.     the flags are set as they were left by the real-mode interrupt handler
  17158.     real-mode register values are returned in the parameter block
  17159. Note:    this function is also supported by FlashTek X-32VM
  17160. SeeAlso: AX=2503h,AX=2505h,AX=250Eh,AH=E3h"OS/286",INT 31/AX=0300h
  17161.  
  17162. Format of parameter block:
  17163. Offset    Size    Description
  17164.  00h    WORD    interrupt number
  17165.  02h    WORD    real-mode DS value
  17166.  04h    WORD    real-mode ES value
  17167.  06h    WORD    real-mode FS value
  17168.  08h    WORD    real-mode GS value
  17169.  0Ah    DWORD    real-mode EAX value
  17170.  0Eh    DWORD    real-mode EDX value
  17171. Note: all other real-mode values set from protected-mode registers
  17172. ----------212512-----------------------------
  17173. INT 21 - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  17174.     AX = 2512h
  17175.     DS:EDX -> pointer to ASCIIZ program name
  17176.     ES:EBX -> pointer to parameter block (see below)
  17177.     ECX = size in bytes of LDT buffer
  17178. Return: CF clear if successful
  17179.         EAX = number of segment descriptors in LDT
  17180.     CF set on error
  17181.         EAX = error code
  17182.         02h file not found or path invalid
  17183.         05h access denied
  17184.         08h insufficient memory
  17185.         0Ah environment invalid
  17186.         0Bh invalid file format
  17187.         80h LDT too small
  17188.  
  17189. Format of parameter block:
  17190. Offset    Size    Description
  17191. Input:
  17192.  00h    DWORD    32-bit offset of environment string
  17193.  04h    WORD    segment of environment string
  17194.  06h    DWORD    32-bit offset of command-tail string
  17195.  0Ah    WORD    segment of command-tail string
  17196.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  17197.  10h    WORD    segment of LDT buffer
  17198. Output:
  17199.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  17200.  14h    WORD    real/protected mode flag
  17201.         0000h  real mode
  17202.         0001h  protected mode
  17203.  16h    DWORD    initial EIP value
  17204.  1Ah    WORD    initial CS value
  17205.  1Ch    DWORD    initial ESP value
  17206.  20h    WORD    initial SS value
  17207.  22h    WORD    initial DS value
  17208.  24h    WORD    initial ES value
  17209.  26h    WORD    initial FS value
  17210.  28h    WORD    initial GS value
  17211. ----------212513-----------------------------
  17212. INT 21 - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  17213.     AX = 2513h
  17214.     BX = segment selector of descriptor in GDT or LDT
  17215.     CL = access-rights byte for alias descriptor
  17216.     CH = use-type bit (USE16 or USE32) for alias descriptor
  17217. Return: CF clear if successful
  17218.         AX = segment selector for created alias
  17219.     CF set on error
  17220.         EAX = error code
  17221.         08h insufficient memory (can't grow LDT)
  17222.         09h invalid segment selector in BX
  17223. ----------212514-----------------------------
  17224. INT 21 - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  17225.     AX = 2514h
  17226.     BX = segment selector of descriptor in GDT or LDT
  17227.     CL = new access-rights byte 
  17228.     CH = new use-type bit (USE16 or USE32)
  17229. Return: CF clear if successful
  17230.     CF set on error
  17231.         EAX = error code
  17232.         09h invalid selector in BX
  17233. SeeAlso: AX=2515h,INT 31/AX=0009h
  17234. ----------212515-----------------------------
  17235. INT 21 - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  17236.     AX = 2515h
  17237.     BX = segment selector of descriptor in GDT or LDT
  17238. Return: CF clear if successful
  17239.         CL = access-rights byte for segment
  17240.         CH = use-type bit (USE16 or USE32)
  17241.     ECX<16-31> destroyed
  17242.     CF set on error
  17243.         EAX = error code
  17244.         09h invalid segment selector in BX
  17245. SeeAlso: AX=2514h
  17246. ----------212516-----------------------------
  17247. INT 21 - Phar Lap 386/DOS-Extender - FREE ALL MEMORY OWNED BY LDT
  17248.     AX = 2516h
  17249.     ???
  17250. Return: ???
  17251. ----------212517-----------------------------
  17252. INT 21 - Phar Lap 386/DOS-Extender - GET INFO ON DOS DATA BUFFER
  17253.     AX = 2517h
  17254.     ???
  17255. Return: ???
  17256. ----------212518-----------------------------
  17257. INT 21 - Phar Lap 386/DOS-Extender - SPECIFY HANDLER FOR MOVED SEGMENTS
  17258.     AX = 2518h
  17259.     ???
  17260. Return: ???
  17261. ----------212519-----------------------------
  17262. INT 21 - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  17263.     AX = 2519h
  17264. Return: CF clear
  17265.     EAX = error code
  17266.         0000h  no error
  17267.         0001h  out of physical memory
  17268.         0002h  out of swap space (unable to grow swap file)
  17269.         0003h  out of LDT entries and unable to grow LDT
  17270.         0004h  unable to change extended memory allocation mark
  17271.         FFFFFFFFh    paging disabled
  17272. Note:    VMM is the Virtual Memory Manager option
  17273. ----------21251A-----------------------------
  17274. INT 21 - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  17275.     AX = 251Ah
  17276.     EDX = number of 4k pages to lock
  17277.     if BL = 00h
  17278.         ECX = linear address of first page to lock
  17279.     if BL = 01h
  17280.         ES:ECX -> pointer to first page to lock
  17281. Return: CF clear if successful
  17282.     CF set on error
  17283.         EAX = error code
  17284.         08h insufficient memory
  17285.         09h invalid address range
  17286. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  17287. ----------21251B-----------------------------
  17288. INT 21 - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  17289.     AX = 251Bh
  17290.     EDX = number of pages to unlock
  17291.     if BL = 00h
  17292.         ECX = linear address of first page to unlock
  17293.     if BL = 01h
  17294.         ES:ECX -> pointer to first page to unlock
  17295. Return: CF clear if successful
  17296.     CF set on error
  17297.         EAX = error code
  17298.         09h invalid address range
  17299. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  17300. ----------21251D-----------------------------
  17301. INT 21 - Phar Lap 386/DOS-Extender VMM - READ PAGE-TABLE ENTRY
  17302.     AX = 251Dh
  17303.     ???
  17304. Return: ???
  17305. SeeAlso: AX=251Eh,AX=EB00h,INT 31/AX=0506h
  17306. ----------21251E-----------------------------
  17307. INT 21 - Phar Lap 386/DOS-Extender VMM - WRITE PAGE-TABLE ENTRY
  17308.     AX = 251Eh
  17309.     ???
  17310. Return: ???
  17311. SeeAlso: AX=251Dh,INT 31/AX=0507h
  17312. ----------21251F-----------------------------
  17313. INT 21 - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  17314.     AX = 251Fh
  17315.     ???
  17316. Return: ???
  17317. SeeAlso: AX=251Dh,AX=251Eh
  17318. ----------212520-----------------------------
  17319. INT 21 - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  17320.     AX = 2520h
  17321.     DS:EDX -> pointer to buffer at least 100 bytes in size (see below)
  17322.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  17323. Return: carry flag clear    
  17324.  
  17325. Format of VM stats buffer:
  17326. Offset    Size    Description
  17327.  00h    DWORD    VM status
  17328.         0001h VM subsystem is present
  17329.         0000h VM not present
  17330.  04h    DWORD    "nconvpg" number of conventional memory pages available
  17331.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  17332.  0Ch    DWORD    "nextpg" total number of extended memory pages
  17333.  10h    DWORD    "extlim" extender memory pages limit
  17334.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  17335.  18h    DWORD    "alockpg" number of locked pages owned by application
  17336.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  17337.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  17338.  24h    DWORD    linear address of beginning of application address space
  17339.  28h    DWORD    linear address of end of application address space
  17340.  2Ch    DWORD    number of seconds since last time VM stats were reset
  17341.  30h    DWORD    number of page faults since last time
  17342.  34h    DWORD    number of pages written to swap file since last time
  17343.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  17344.  3Ch    DWORD    number of virtual pages allocated to the application
  17345.  40h    DWORD    size in pages of swap file
  17346.  44h    DWORD    number of system pages allocated with EMS calls
  17347.  48h    DWORD    minimum number of conventional memory pages
  17348.  4Ch    DWORD    maximum size in bytes to which swap file can be increased
  17349.  50h    DWORD    "vmflags" bit 0 = 1 if page fault in progress
  17350.  54h 16 BYTEs    reserved for future expansion (set to zero)
  17351. ----------212521-----------------------------
  17352. INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEMORY USAGE
  17353.     AX = 2521h
  17354.     EBX = max 4k pages of physical extended memory which program may use
  17355. Return: CF clear if successful
  17356.        EBX = maximum limit in pages
  17357.        ECX = minimum limit in pages
  17358.     CF set on error
  17359.         EAX = error code
  17360.         08h insufficient memory or -nopage switch used
  17361. SeeAlso: AX=2522h
  17362. ----------212522-----------------------------
  17363. INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY ALTERNATE PAGE-FAULT HANDLER
  17364.     AX = 2522h
  17365.     ???
  17366. Return: ???
  17367. SeeAlso: AX=2523h
  17368. ----------212523-----------------------------
  17369. INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  17370.     AX = 2523h
  17371.     ???
  17372. Return: ???
  17373. SeeAlso: AX=2522h
  17374. ----------212524-----------------------------
  17375. INT 21 - Phar Lap 386/DOS-Extender VMM - INSTALL PAGE-REPLACEMENT HANDLERS
  17376.     AX = 2524h
  17377.     ???
  17378. Return: ???
  17379. ----------212525-----------------------------
  17380. INT 21 - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENTIONAL MEM USAGE
  17381.     AX = 2525h
  17382.     EBX = limit in 4k pages of physical conventional memory which program 
  17383.           may use
  17384. Return: CF clear if successful
  17385.         EBX = maximum limit in pages
  17386.         ECX = minimum limit in pages
  17387.     CF set on error
  17388.         EAX = error code
  17389.         08h insufficient memory or -nopage switch used
  17390. SeeAlso: AX=2521h
  17391. ----------212526-----------------------------
  17392. INT 21 - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  17393.     AX = 2526h
  17394.     ???
  17395. Return: ???
  17396. ----------21252B-----------------------------
  17397. INT 21 - FlashTek X-32VM - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
  17398.     AX = 252Bh
  17399.     BH = function
  17400.         05h lock pages
  17401.         06h unlock pages
  17402.     BL = address type
  17403.         00h linear address
  17404.         ECX = linear start address of memory region
  17405.         01h segmented address
  17406.         ES:ECX -> start of memory region
  17407.     EDX = size of memory region in bytes
  17408. Return: CF clear if successful
  17409.     CF set on error
  17410. Note:    if X-32 is not using virtual memory, this function always succeeds
  17411. ----------212532-----------------------------
  17412. INT 21 - FlashTek X-32VM - GET EXCEPTION HANDLER VECTOR
  17413.     AX = 2532h
  17414.     CL = exception number (00h-0Fh)
  17415. Return: CF clear if successful
  17416.         ES:EBX = CS:EIP of current exception handler
  17417.     CF set on error (CL > 0Fh)
  17418. SeeAlso: AX=2533h
  17419. ----------212533-----------------------------
  17420. INT 21 - FlashTek X-32VM - SET EXCEPTION HANDLER VECTOR
  17421.     AX = 2533h
  17422.     CL = exception number (00h-0Fh)
  17423.     DS:EDX = CS:EIP of new exception handler
  17424. Return: CF clear if successful
  17425.     CF set on error (CL > 0Fh)
  17426. SeeAlso: AX=2532h
  17427. ----------2125C0-----------------------------
  17428. INT 21 - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  17429.     AX = 25C0h
  17430.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  17431. Return: CF clear if successful
  17432.         AX = real-mode paragraph address of memory
  17433.     CF set on error
  17434.         AX = error code
  17435.         07h MS-DOS memory control blocks destroyed
  17436.         08h insufficient memory
  17437.         BX = size in paragraphs of largest available memory block
  17438. SeeAlso: AX=25C1h,AX=25C2h
  17439. ----------2125C1-----------------------------
  17440. INT 21 - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  17441.     AX = 25C1h
  17442.     CX = real-mode paragraph address of memory block to free
  17443. Return: CF clear if successful
  17444.         EAX destroyed
  17445.     CF set on error
  17446.         AX = error code
  17447.         07h MS-DOS memory control blocks destroyed
  17448.         09h invalid memory block address in CX
  17449. SeeAlso: AX=25C0h,AX=25C2h
  17450. ----------2125C2-----------------------------
  17451. INT 21 - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  17452.     AX = 25C2h
  17453.     BX = new requested block size in paragraphs
  17454.     CX = real-mode paragraph address of memory block to modify
  17455. Return: CF clear if successful
  17456.         EAX destroyed
  17457.     CF set on error
  17458.         AX = error code
  17459.         07h MS-DOS memory control blocks destroyed
  17460.         08h insufficient memory
  17461.         09h invalid memory block address in CX
  17462.         BX = size in paragraphs of largest available memory block
  17463. SeeAlso: AX=25C0h,AX=25C1h
  17464. ----------2125C3-----------------------------
  17465. INT 21 - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  17466.     AX = 25C3h
  17467.     ES:EBX -> pointer to parameter block (see below)
  17468.     DS:EDX -> pointer to ASCIIZ program filename
  17469. Return: CF clear if successful
  17470.         all registers unchanged
  17471.     CF set on error
  17472.         EAX = error code
  17473.         01h function code in AL is invalid ???
  17474.         02h file not found or path invalid
  17475.         05h access denied
  17476.         08h insufficient memory to load program
  17477.         0Ah environment invalid
  17478.         0Bh invalid file format
  17479.  
  17480. Format of parameter block:
  17481. Offset    Size    Description
  17482.  00h    DWORD    32-bit offset of environment string
  17483.  04h    WORD    segment selector of environment string
  17484.  06h    DWORD    32-bit offset of command-tail string
  17485.  0Ah    WORD    segment selector of command-tail string
  17486. ----------2126-------------------------------
  17487. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  17488.     AH = 26h
  17489.     DX = segment at which to create PSP (see below)
  17490. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  17491.       taken from interrupt vector table
  17492.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  17493.       copy
  17494. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  17495.  
  17496. Format of PSP:
  17497. Offset    Size    Description
  17498.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  17499.         the CDh 20h here is often used as a signature for a valid PSP
  17500.  02h    WORD    segment of first byte beyond memory allocated to program
  17501.  04h    BYTE    unused filler
  17502.  05h    BYTE    CP/M CALL 5 service request (FAR JMP to 000C0h)
  17503.         BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  17504.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  17505.  08h  2 BYTEs    remainder of FAR JMP at 05h
  17506.  0Ah    DWORD    stored INT 22 termination address
  17507.  0Eh    DWORD    stored INT 23 control-Break handler address
  17508.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  17509.  16h    WORD    segment of parent PSP
  17510.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  17511.  2Ch    WORD    DOS 2+ segment of environment for process
  17512.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  17513.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  17514.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  17515.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  17516.         used by SHARE in DOS 3.3
  17517.  3Ch  4 BYTEs    unused by DOS versions <= 5.00
  17518.         reportedly used by Novell NetWare shell 3.x
  17519.  40h  2 BYTEs    DOS 5.0 version to return on INT 21/AH=30h
  17520.  42h  6 BYTEs    unused by DOS versions <= 5.00
  17521.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  17522.  49h  7 BYTEs    unused by DOS versions <= 5.00
  17523.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  17524.  53h  9 BYTEs    unused in DOS versions <= 5.00
  17525.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  17526.         overwrites second FCB if opened
  17527.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  17528.         overwrites beginning of commandline if opened
  17529.  7Ch  4 BYTEs    unused
  17530.  80h 128 BYTEs    commandline / default DTA
  17531.         command tail is BYTE for length of tail, N BYTEs for the tail,
  17532.         followed by a BYTE containing 0Dh
  17533. Notes:    in DOS versions 3.0 and up, the limit on simultaneously open files may
  17534.       be increased by allocating memory for a new open file table, filling
  17535.       it with FFh, copying the first 20 bytes from the default table, and
  17536.       adjusting the pointer and count at 34h and 32h.  However, DOS
  17537.       versions through  at least 3.30 will only copy the first 20 file
  17538.       handles into a child PSP (including the one created on EXEC).
  17539.     network redirectors based on the original MS-Net implementation use
  17540.       values of 80h-FEh in the open file table to indicate remote files;
  17541.       Novell NetWare reportedly also uses values of 80h-FEh
  17542.     MSDOS 5.00 incorrectly fills the FCB fields when loading a program
  17543.       high; the first FCB is empty and the second contains the first
  17544.       parameter
  17545.     some DOS extenders place protected-mode values in various PSP fields
  17546.       such as the "parent" field, which can confuse PSP walkers.  Always
  17547.       check either for the CDh 20h signature or that the suspected PSP is
  17548.       at the beginning of a memory block which owns itself (the preceding
  17549.       paragraph should be a valid MCB with "owner" the same as the
  17550.       suspected PSP).
  17551.  
  17552. Format of environment block:
  17553. Offset    Size    Description
  17554.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  17555.       N BYTEs    second environment variable, ASCIZ string
  17556.     ...
  17557.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  17558.     BYTE    00h
  17559. ---DOS 3+---
  17560.     WORD    number of strings following environment (normally 1)
  17561.       N BYTEs    ASCIZ full pathname of program owning this environment
  17562.         other strings may follow
  17563. ----------2127-------------------------------
  17564. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  17565.     AH = 27h
  17566.     CX = number of records to read
  17567.     DS:DX -> opened FCB (see AH=0Fh)
  17568. Return: AL = status
  17569.         00h successful, all records read
  17570.         01h end of file, no data read
  17571.         02h segment wrap in DTA, no data read
  17572.         03h end of file, partial read
  17573.     [DTA] = records read from file
  17574.     CX = number of records read (return AL = 00h or 03h)
  17575. Notes:    read begins at current file position as specified in FCB; the file
  17576.       position is updated after reading
  17577.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  17578. SeeAlso: AH=21h,AH=28h,AH=3Fh
  17579. ----------2128-------------------------------
  17580. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  17581.     AH = 28h
  17582.     CX = number of records to write
  17583.     DS:DX -> opened FCB (see AH=0Fh)
  17584.     [DTA] = records to write
  17585. Return: AL = status
  17586.         00h successful
  17587.         01h disk full or file read-only
  17588.         02h segment wrap in DTA
  17589.     CX = number of records written
  17590. Notes:    write begins at current file position as specified in FCB; the file
  17591.       position is updated after writing
  17592.     if CX = 0000h on entry, no data is written; instead the file size is
  17593.       adjusted to be the same as the file position specified by the random
  17594.       record and record size fields of the FCB
  17595.     if the data to be written is less than a disk sector, it is copied into
  17596.       a DOS disk buffer, to be written out to disk at a later time
  17597.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  17598. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
  17599. ----------2129-------------------------------
  17600. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  17601.     AH = 29h
  17602.     AL = parsing options
  17603.         bit 0: skip leading separators
  17604.         bit 1: use existing drive number in FCB if no drive is specified,
  17605.            instead of setting field to zero
  17606.         bit 2: use existing filename in FCB if no base name is specified,
  17607.            instead of filling field with blanks
  17608.         bit 3: use existing extension in FCB if no extension is specified,
  17609.            instead of filling field with blanks
  17610.         bits 4-7: reserved (0)
  17611.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  17612.     ES:DI -> buffer for unopened FCB
  17613. Return: AL = result code
  17614.         00h successful parse, no wildcards encountered
  17615.         01h successful parse, wildcards present
  17616.         FFh failed (invalid drive specifier)
  17617.     DS:SI -> first unparsed character
  17618.     ES:DI buffer filled with unopened FCB (see AH=0Fh)
  17619. Notes:    asterisks expanded to question marks in the FCB
  17620.     all processing stops when a filename terminator is encountered
  17621.     cannot be used with filespecs which include a path (DOS 2+)
  17622. SeeAlso: AH=0Fh,AH=16h,AH=26h
  17623. ----------212A-------------------------------
  17624. INT 21 - DOS 1+ - GET SYSTEM DATE
  17625.     AH = 2Ah
  17626. Return: CX = year (1980-2099)
  17627.     DH = month
  17628.     DL = day
  17629. ---DOS 1.10+---
  17630.     AL = day of week (00h=Sunday)
  17631. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h,INT 2F/AX=120Dh
  17632. ----------212B-------------------------------
  17633. INT 21 - DOS 1+ - SET SYSTEM DATE
  17634.     AH = 2Bh
  17635.     CX = year (1980-2099)
  17636.     DH = month
  17637.     DL = day
  17638. Return: AL = status
  17639.         00h successful
  17640.         FFh invalid date, system date unchanged
  17641. Note:    DOS 3.3+ also sets CMOS clock
  17642. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  17643. ----------212B--CX4149-----------------------
  17644. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  17645.     AH = 2Bh
  17646.     CX = 4149h ('AI')
  17647.     DX = 413Fh ('A?')
  17648. Return: AL <> FFh if installed
  17649. Note:    Borland's TKERNEL makes this call
  17650. ----------212B--CX4358-----------------------
  17651. INT 21 - PC Tools v5.x PC-Cache - INSTALLATION CHECK
  17652.     AH = 2Bh
  17653.     CX = 4358h ('CX')
  17654. Return: AL = FFh if PC-Cache not installed
  17655.     AL = 00h if installed
  17656.         CX = 6378h ('cx')
  17657.         BX = ???
  17658.         DX = ???
  17659. SeeAlso: INT 16/AX=FFA5h/CX=1111h
  17660. ----------212B--CX4445-----------------------
  17661. INT 21 - DESQview - INSTALLATION CHECK
  17662.     AH = 2Bh
  17663.     CX = 4445h ('DE')
  17664.     DX = 5351h ('SQ')
  17665.     AL = subfunction (DV v2.00+)
  17666.         01h get version
  17667.         Return: BX = version (BH = major, BL = minor)
  17668.         Note: early copies of v2.00 return 0002h
  17669.         02h get shadow buffer info, and start shadowing
  17670.         Return: BH = rows in shadow buffer
  17671.             BL = columns in shadow buffer
  17672.             DX = segment of shadow buffer
  17673.         04h get shadow buffer info
  17674.         Return: BH = rows in shadow buffer
  17675.             BL = columns in shadow buffer
  17676.             DX = segment of shadow buffer
  17677.         05h stop shadowing
  17678. Return: AL = FFh if DESQview not installed
  17679. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  17680.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  17681.       01h for all subfunction requests 0Ch and higher and appears to ignore
  17682.       all lower-numbered functions not listed here.
  17683.     DESQview versions 2.5x are part of DESQview/X v1.0x.
  17684. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  17685. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  17686. ----------212B--CX454C-----------------------
  17687. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  17688.     AH = 2Bh
  17689.     CX = 454Ch ('EL')
  17690.     DX = 5253h ('RS')
  17691. Return: ES:BX -> ELRES history structure (see below)
  17692.     DX = DABEh (signature, DAve BEnnett)
  17693. Note:    ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett
  17694.       which stores recent errorlevel values, allows them to be retrieved
  17695.       for use in batch files, and can place them in an environment variable
  17696. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  17697.  
  17698. Format of ELRES history structure:
  17699. Offset    Size    Description
  17700.  00h    WORD    number of return codes which can be stored by following buffer
  17701.  02h    WORD    current position in buffer (treated as a ring)
  17702.  04h  N BYTEs    ELRES buffer
  17703. ----------212B01CX5441-----------------------
  17704. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  17705.     AX = 2B01h
  17706.     CX = 5441h ('TA')
  17707.     DX = 4D45h ('ME')
  17708. ---v2.60---
  17709.     BH = ???
  17710.         00h skip ???, else do
  17711. Return: AL = 02h if installed
  17712.     ES:DX -> data area in TAME-RES (see below)
  17713. Note:    TAME is a shareware program by David G. Thomas which gives up CPU time
  17714.       to other partitions under a multitasker when the current partition's
  17715.       program incessantly polls the keyboard or system time
  17716.  
  17717. Format of TAME 2.10-2.20 data area:
  17718. Offset    Size    Description
  17719.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  17720.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  17721.  02h    DWORD    number of task switches
  17722.  06h    DWORD    number of keyboard polls
  17723.  0Ah    DWORD    number of time polls
  17724.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  17725.  12h    DWORD    original INT 10h
  17726.  16h    DWORD    original INT 14h
  17727.  1Ah    DWORD    original INT 15h
  17728.  1Eh    DWORD    original INT 16h
  17729.  22h    DWORD    original INT 17h
  17730.  26h    DWORD    original INT 21h
  17731.  2Ah    DWORD    original INT 28h
  17732.  2Eh    WORD    offset of TAME INT 10h handler
  17733.  30h    WORD    offset of TAME INT 14h handler
  17734.  32h    WORD    offset of TAME INT 15h handler
  17735.  34h    WORD    offset of TAME INT 16h handler
  17736.  36h    WORD    offset of TAME INT 17h handler
  17737.  38h    WORD    offset of TAME INT 21h handler
  17738.  3Ah    WORD    offset of TAME INT 28h handler
  17739.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  17740.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  17741.  40h    WORD    number of polls remaining before next task switch
  17742.  42h    WORD    /KEYIDLE value
  17743.  44h    BYTE    flags for interrupts already grabbed by TAME
  17744.         bit 0: INT 10h
  17745.             1: INT 14h
  17746.             2: INT 15h
  17747.             3: INT 16h
  17748.             4: INT 17h
  17749.             5: INT 21h
  17750.             6: INT 28h
  17751.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  17752.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  17753.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  17754.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  17755.  49h    BYTE    window or task number for this task
  17756.  4Ah    BYTE    multitasker type ???
  17757.         01h DESQview
  17758.         02h DoubleDOS
  17759.         03h TopView
  17760.         ???
  17761.  4Bh    BYTE    type of task switching selected
  17762.         bit 0: DESQview???
  17763.             1: DoubleDOS???
  17764.             2: TopView???
  17765.             3: KeySwitch
  17766.             4: HLT instruction
  17767.  4Ch    BYTE    ???
  17768.  4Dh    BYTE    flags
  17769.         bit 1: /FREQ instead of /MAX
  17770.  4Eh    BYTE    /FG: value
  17771.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  17772.  50h    BYTE    ???
  17773.  
  17774. Format of TAME 2.30 data area:
  17775. Offset    Size    Description
  17776.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  17777.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  17778.  02h    DWORD    number of task switches
  17779.  06h    DWORD    number of keyboard polls
  17780.  0Ah    DWORD    number of time polls
  17781.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  17782.  12h    DWORD    time of last /CLEAR or TAME-RES load
  17783.  16h    DWORD    time yielded
  17784.  1Ah    DWORD    time spent polling
  17785.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  17786.  22h    DWORD    original INT 10h
  17787.  26h    DWORD    original INT 14h
  17788.  2Ah    DWORD    original INT 15h
  17789.  2Eh    DWORD    original INT 16h
  17790.  32h    DWORD    original INT 17h
  17791.  36h    DWORD    original INT 21h
  17792.  3Ah    DWORD    original INT 28h
  17793.  3Eh    WORD    offset of TAME INT 10h handler
  17794.  40h    WORD    offset of TAME INT 14h handler
  17795.  42h    WORD    offset of TAME INT 15h handler
  17796.  44h    WORD    offset of TAME INT 16h handler
  17797.  46h    WORD    offset of TAME INT 17h handler
  17798.  48h    WORD    offset of TAME INT 21h handler
  17799.  4Ah    WORD    offset of TAME INT 28h handler
  17800.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  17801.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  17802.  50h    WORD    number of polls remaining before next task switch
  17803.  52h    WORD    /KEYIDLE value
  17804.  54h    WORD    /FG: value
  17805.  56h    WORD    task switches left until next FGONLY DESQview API call
  17806.  58h    WORD    multitasker version
  17807.  5Ah    WORD    virtual screen segment
  17808.  5Ch    BYTE    flags for interrupts already grabbed by TAME
  17809.         bit 0: INT 10h
  17810.             1: INT 14h
  17811.             2: INT 15h
  17812.             3: INT 16h
  17813.             4: INT 17h
  17814.             5: INT 21h
  17815.             6: INT 28h
  17816.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  17817.  5Eh    BYTE    window or task number for this task
  17818.  5Fh    BYTE    multitasker type
  17819.         01h DESQview
  17820.         02h DoubleDOS
  17821.         03h TopView
  17822.         04h OmniView
  17823.         05h VM/386
  17824.  60h    BYTE    type of task switching selected (bit flags)
  17825.         bit 0: DESQview
  17826.             1: DoubleDOS
  17827.             2: TopView
  17828.             3: OmniView
  17829.             4: KeySwitch
  17830.             5: HLT instruction
  17831.  61h    BYTE    watch_DOS
  17832.  62h    BYTE    bit flags
  17833.         bit 0: TAME enabled
  17834.             1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
  17835.             2: /TIMEPOLL
  17836.             3: /KEYPOLL
  17837.             4: inhibit timer
  17838.             5: enable status monitoring
  17839.  63h    BYTE    old status
  17840.  64h    WORD    signature DA34h
  17841.  
  17842. Format of TAME 2.60 data area:
  17843. Offset    Size    Description
  17844.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  17845.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  17846.  02h    DWORD    number of task switches
  17847.  06h    DWORD    number of keyboard polls
  17848.  0Ah    DWORD    number of time polls
  17849.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  17850.  12h    DWORD    time of last /CLEAR or TAME-RES load
  17851.  16h    DWORD    time yielded
  17852.  1Ah    DWORD    time spent polling
  17853.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  17854.  22h  4 BYTEs    ???
  17855.  26h    DWORD    original INT 10h
  17856.  2Ah    DWORD    original INT 14h
  17857.  2Eh    DWORD    original INT 15h
  17858.  32h    DWORD    original INT 16h
  17859.  36h    DWORD    original INT 17h
  17860.  3Ah    DWORD    original INT 21h
  17861.  3Eh    DWORD    original INT 28h
  17862.  42h    WORD    offset of TAME INT 10h handler
  17863.  44h    WORD    offset of TAME INT 14h handler
  17864.  46h    WORD    offset of TAME INT 15h handler
  17865.  48h    WORD    offset of TAME INT 16h handler
  17866.  4Ah    WORD    offset of TAME INT 17h handler
  17867.  4Ch    WORD    offset of TAME INT 21h handler
  17868.  4Eh    WORD    offset of TAME INT 28h handler
  17869.  50h    WORD    X in /max:X,Y or /freq:X,Y
  17870.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  17871.  54h    WORD    number of polls remaining before next task switch
  17872.  56h    WORD    /KEYIDLE value
  17873.  58h  4 BYTEs    ???
  17874.  5Ch    WORD    X in /boost:X,Y
  17875.  5Eh    WORD    Y in /boost:X,Y
  17876.  60h    WORD    /FG: value
  17877.  62h    WORD    task switches left until next FGONLY DESQview API call
  17878.  64h    WORD    multitasker version ???
  17879.  66h    WORD    virtual screen segment
  17880.  68h    BYTE    flags for interrupts already grabbed by TAME
  17881.         bit 0: INT 10h
  17882.             1: INT 14h
  17883.             2: INT 15h
  17884.             3: INT 16h
  17885.             4: INT 17h
  17886.             5: INT 21h
  17887.             6: INT 28h
  17888.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  17889.  6Ah    BYTE    window or task number for this task
  17890.  6Bh    BYTE    multitasker type
  17891.         01h DESQview
  17892.         02h DoubleDOS
  17893.         03h TopView
  17894.         04h OmniView
  17895.         05h VM/386
  17896.  6Ch    BYTE    type of task switching selected (bit flags)
  17897.         bit 0: DESQview
  17898.             1: DoubleDOS
  17899.             2: TopView
  17900.             3: OmniView
  17901.             4: KeySwitch
  17902.             5: HLT instruction
  17903.  6Dh    BYTE    watch_DOS
  17904.  6Eh    BYTE    bit flags
  17905.         bit 0: TAME enabled
  17906.             1: /FREQ instead of /MAX (counts in 50h and 52h per tick)
  17907.             2: /TIMEPOLL
  17908.             3: /KEYPOLL
  17909.             4: inhibit timer
  17910.             5: enable status monitoring
  17911.  6Fh    BYTE    old status
  17912.  70h    WORD    signature DA34h
  17913. ----------212B44BX4D41-----------------------
  17914. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  17915.     AX = 2B44h ('D')
  17916.     BX = 4D41h ('MA')
  17917.     CX = 7063h ('pc')
  17918.     DX = 4157h ('AW')
  17919. Return: AX = 4F4Bh ('OK') if large host resident
  17920.        = 6F6Bh ('ok') if small host resident
  17921.     CX:DX -> API entry point
  17922. SeeAlso: INT 16/AH=79h
  17923.  
  17924. Call API entry point with:
  17925.     AX = 0000h get pcANYWHERE IV version
  17926.         DS:SI -> BYTE buffer for host type code
  17927.         Return: AH = version number
  17928.             AL = revision number
  17929.             DS:DI buffer byte filled with
  17930.             00h full-featured host
  17931.             01h limited-feature LAN host
  17932.             other API may not be supported
  17933.     AX = 0001h initialize operation
  17934.         DS:SI -> initialization request structure (see below)
  17935.         Return: AX = function status (see below)
  17936.     AX = 0002h get status
  17937.         Return: AH = current operating mode (see init req structure below)
  17938.             AL = current connection status
  17939.             bit 0: a physical connection is active
  17940.             bit 1: remove screen updating is active
  17941.             bit 2: connection checking is active
  17942.             bit 3: hot key detection is active
  17943.             bit 4: background file transfer is active
  17944.     AX = 0003h suspend remote screen updates
  17945.         Return: AX = function status (see below)
  17946.     AX = 0004h resume screen updates
  17947.         Return: AX = function status (see below)
  17948.     AX = 0005h end current remote access session
  17949.         DS:SI -> termination request structure (see below)
  17950.         Return: AX = function status (see below)
  17951.     AX = 0006h remove pcANYWHERE IV from memory
  17952.         Return: AX = status
  17953.             0000h successful
  17954.             FFD2h unable to release allocated memory
  17955.             FFD1h unable to release interrupt vectors
  17956.     AX = 8000h read data from communications channel
  17957.         DS:BX -> buffer
  17958.         CX = buffer size
  17959.         Return: AX >= number of characters read/available
  17960.             AX < 0 on error
  17961.     AX = 8001h write data to communications channel
  17962.         DS:BX -> buffer
  17963.         CX = buffer size
  17964.         Return: AX >= number of characters written
  17965.             AX < 0 on error
  17966.     AX = 8002h get connection status
  17967.         Return: AX = status
  17968.             > 0000h if connection active
  17969.             = 0000h if connection lost
  17970.             < 0000h on error
  17971.  
  17972. Format of initialization request structure:
  17973. Offset    Size    Description
  17974.  00h    BYTE    operating mode
  17975.         00h wait for a call
  17976.         01h hot key activates
  17977.         02h incoming call activates
  17978.         03h initiate a call
  17979.  01h  3 BYTEs    user ID to append to config file names
  17980.  04h    WORD    DS-relative pointer to path for config files
  17981.  06h    WORD    DS-relative pointer to path for program files
  17982.  
  17983. Format of termination request structure:
  17984. Offset    Size    Description
  17985.  00h    BYTE    operating mode after termination
  17986.         00h wait for a call
  17987.         01h hot key activates
  17988.         02h incoming call activates
  17989.         80h use current mode
  17990.         FFh remove from memory
  17991.  
  17992. Values for function status:
  17993.  0000h function completed successfully
  17994.  FFF2h unable to establish a connection when operating mode is
  17995.     "Initiate a call"
  17996.  FFF3h modem configuration is invalid (corrupt config)
  17997.  FFF4h modem initialization failed (no modem response)
  17998.  FFF5h the communications device could not be initialized
  17999.  FFF6h the host operator aborted the function
  18000.  FFF7h the communications driver type specified in the configuration file is
  18001.     different than the one loaded when pcANYWHERE IV was initially started
  18002.  FFF9h the configuration file is invalid
  18003.  FFFAh the configuration file could not be found
  18004.  FFFBh no session is active
  18005.  FFFCh a remote access session is active
  18006.  FFFDh the specified operating mode is invalid
  18007. ----------212C-------------------------------
  18008. INT 21 - DOS 1+ - GET SYSTEM TIME
  18009.     AH = 2Ch
  18010. Return: CH = hour
  18011.     CL = minute
  18012.     DH = second
  18013.     DL = 1/100 seconds
  18014. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  18015.       so returned times generally do not increment by 1
  18016.     on some systems, DL may always return 00h
  18017. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  18018. SeeAlso: INT 2F/AX=120Dh
  18019. ----------212D-------------------------------
  18020. INT 21 - DOS 1+ - SET SYSTEM TIME
  18021.     AH = 2Dh
  18022.     CH = hour
  18023.     CL = minute
  18024.     DH = second
  18025.     DL = 1/100 seconds
  18026. Return: AL = result
  18027.         00h successful
  18028.         FFh invalid time, system time unchanged
  18029. Note:    DOS 3.3+ also sets CMOS clock
  18030. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  18031. ----------212E--DL00-------------------------
  18032. INT 21 - DOS 1+ - SET VERIFY FLAG
  18033.     AH = 2Eh
  18034.     DL = 00h (DOS 1.x/2.x only)
  18035.     AL = new state of verify flag
  18036.         00h off
  18037.         01h on
  18038. Notes:    default state at system boot is OFF
  18039.     when ON, all disk writes are verified provided the device driver
  18040.       supports read-after-write verification
  18041. SeeAlso: AH=54h
  18042. ----------212F-------------------------------
  18043. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  18044.     AH = 2Fh
  18045. Return: ES:BX -> current DTA
  18046. Note:    under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
  18047. SeeAlso: AH=1Ah
  18048. ----------2130-------------------------------
  18049. INT 21 - DOS 2+ - GET DOS VERSION
  18050.     AH = 30h
  18051. ---DOS 5.0---
  18052.     AL = what to return in BH
  18053.         00h OEM number (as for DOS 2.0-4.0x)
  18054.         01h version flag
  18055. Return: AL = major version number (00h if DOS 1.x)
  18056.     AH = minor version number
  18057.     BL:CX = 24-bit user serial number (most versions do not use this)
  18058. ---if DOS <5 or AL=00h---
  18059.     BH = OEM number
  18060.         00h IBM
  18061.         05h Zenith
  18062.         16h DEC
  18063.         23h Olivetti
  18064.         29h Toshiba
  18065.         4Dh    Hewlett-Packard
  18066.         99h    STARLITE architecture (OEM DOS, NETWORK DOS, SMP DOS)
  18067.         FFh Microsoft, Phoenix
  18068. ---if DOS 5.0 and AL=01h---
  18069.     BH = version flag
  18070.         08h DOS is in ROM
  18071.         10h DOS is in HMA
  18072. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
  18073.     the OS/2 v2.x Compatibility Box returns major version 14h (20)
  18074.     the Windows/NT DOS box returns major version 1Eh (30)
  18075.     DOS 4.01 and 4.02 identify themselves as version 4.00; use
  18076.       INT 21/AH=87h to distinguish between the original European MSDOS 4.00
  18077.       and the later PCDOS 4.0x and MSDOS 4.0x
  18078.     generic MSDOS 3.30, Compaq MSDOS 3.31, and others identify themselves
  18079.       as PC-DOS by returning OEM number 00h
  18080.     the version returned under DOS 4.0x may be modified by entries in
  18081.       the special program list (see AH=52h)
  18082.     the version returned under DOS 5.0 may be modified by SETVER; use
  18083.       AX=3306h to get the true version number
  18084. SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
  18085. SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=E002h
  18086. ----------2130-------------------------------
  18087. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  18088.     AH = 30h
  18089.     EAX = 00003000h
  18090.     EBX = 50484152h ("PHAR")
  18091. Return: AL = major DOS version
  18092.     AH = minor DOS version
  18093.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  18094.         BL = ASCII major version number
  18095.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  18096.         EDX = address of GDA
  18097. SeeAlso: AX=2501h,AX=FF00h,INT 2F/AX=F100h
  18098. ----------2130--DXABCD-----------------------
  18099. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  18100.     AH = 30h
  18101.     DX = ABCDh
  18102. Return: DX = DCBAh if installed
  18103. SeeAlso: AX=0D20h,AX=30F1h
  18104. ----------213000BX1234-----------------------
  18105. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  18106.     AX = 3000h
  18107.     BX = 1234h
  18108.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  18109. Return: AL = DOS major version
  18110.     AH = DOS minor version
  18111.     CX:BX -> Ctask global data block
  18112. Notes:    if first eight bytes of returned data block equal eight bytes passed
  18113.       in, CTask is resident
  18114.     CTask is a multitasking kernel for C written by Thomas Wagner
  18115. ----------213000BX3000-----------------------
  18116. INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
  18117.     AX = 3000h
  18118.     BX = 3000h
  18119.     CX = DX = 3000h
  18120. Return: AX = PC-MOS version
  18121. Program: PC-MOS/386 is a multitasking/multiuser MSDOS-compatible operating
  18122.       system by Software Links, Inc.
  18123. SeeAlso: AH=30h,INT 38/AH=02h,INT 38/AH=10h
  18124. ----------2130F1-----------------------------
  18125. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  18126.     AX = 30F1h
  18127. Return: AL = 00h if resident
  18128. SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
  18129. ----------2130FFCX4445-----------------------
  18130. INT 21 - DESQ??? - INSTALLATION CHECK
  18131.     AX = 30FFh
  18132.     CX = 4445h ("DE")
  18133.     DX = 5351h ("SQ")
  18134. Return: BH = 05h if installed
  18135.     ???
  18136. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  18137.       DESQview, so it may be for DESQview's precursor DESQ.
  18138. SeeAlso: AX=4404h"DUBLDISK"
  18139. ----------2131-------------------------------
  18140. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  18141.     AH = 31h
  18142.     AL = return code
  18143.     DX = number of paragraphs to keep resident
  18144. Return: never
  18145. Notes:    the value in DX only affects the memory block containing the PSP;
  18146.       additional memory allocated via AH=48h is not affected
  18147.     the minimum number of paragraphs which will remain resident is 11h
  18148.       for DOS 2.x and 06h for DOS 3+
  18149.     most TSRs can save some memory by releasing their environment block
  18150.       before terminating (see AH=26h,AH=49h)
  18151. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  18152. ----------2132-------------------------------
  18153. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  18154.     AH = 32h
  18155.     DL = drive number (00h = default, 01h = A:, etc)
  18156. Return: AL = status
  18157.         00h successful
  18158.         DS:BX -> Drive Parameter Block (DPB) for specified drive
  18159.         FFh invalid or network drive
  18160. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  18161.       except for the DWORD at offset 12h
  18162.     this call updates the DPB by reading the disk; the DPB may be accessed
  18163.       via the DOS list of lists (see AH=52h) if disk access is not
  18164.       desirable.
  18165.     undocumented prior to the release of DOS 5.0; only the DOS 4+ version
  18166.       of the DPB has been documented, however
  18167. SeeAlso: AH=1Fh,AH=52h
  18168.  
  18169. Format of DOS Drive Parameter Block:
  18170. Offset    Size    Description
  18171.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  18172.  01h    BYTE    unit number within device driver
  18173.  02h    WORD    bytes per sector
  18174.  04h    BYTE    highest sector number within a cluster
  18175.  05h    BYTE    shift count to convert clusters into sectors
  18176.  06h    WORD    number of reserved sectors at beginning of drive
  18177.  08h    BYTE    number of FATs
  18178.  09h    WORD    number of root directory entries
  18179.  0Bh    WORD    number of first sector containing user data
  18180.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  18181.         16-bit FAT if greater than 0FF6h, else 12-bit FAT
  18182.  0Fh    BYTE    number of sectors per FAT
  18183.  10h    WORD    sector number of first directory sector
  18184.  12h    DWORD    address of device driver header
  18185.  16h    BYTE    media ID byte
  18186.  17h    BYTE    00h if disk accessed, FFh if not
  18187.  18h    DWORD    pointer to next DPB
  18188. ---DOS 2.x---
  18189.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  18190.         FFFFh = unknown
  18191.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  18192. ---DOS 3.x---
  18193.  1Ch    WORD    cluster at which to start search for free space when writing
  18194.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  18195. ---DOS 4.0-5.0---
  18196.  0Fh    WORD    number of sectors per FAT
  18197.  11h    WORD    sector number of first directory sector
  18198.  13h    DWORD    address of device driver header
  18199.  17h    BYTE    media ID byte
  18200.  18h    BYTE    00h if disk accessed, FFh if not
  18201.  19h    DWORD    pointer to next DPB
  18202.  1Dh    WORD    cluster at which to start search for free space when writing,
  18203.         usually the last cluster allocated
  18204.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  18205. ----------2133-------------------------------
  18206. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  18207.     AH = 33h
  18208.     AL = subfunction
  18209.         00h get current extended break state
  18210.         Return: DL = current state, 00h = off, 01h = on
  18211.         01h set state of extended ^C/^Break checking
  18212.         DL = 00h off, check only on character I/O functions
  18213.              01h on, check on all DOS functions
  18214. Note:    under DOS 3.1+, this function does not use any of the DOS-internal and
  18215.       may thus be called at any time
  18216. SeeAlso: AX=3302h
  18217. ----------213302-----------------------------
  18218. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  18219.     AX = 3302h
  18220.     DL = new state
  18221.          00h for OFF or 01h for ON
  18222. Return: DL = old state of extended BREAK checking
  18223. Note:    this function does not use any of the DOS-internal stacks and may thus
  18224.       be called at any time; one possible use is modifying Control-Break
  18225.       checking from within an interrupt handler or TSR
  18226. SeeAlso: AH=33h
  18227. ----------213305-----------------------------
  18228. INT 21 - DOS 4+ - GET BOOT DRIVE
  18229.     AX = 3305h
  18230. Return: DL = boot drive (1=A:,...)
  18231. Notes:    fully reentrant
  18232.     NEC 9800-series PCs always call the boot drive A: and assign the other
  18233.       drive letters sequentially to the other drives in the system
  18234. ----------213306-----------------------------
  18235. INT 21 - DOS 5.0 - GET TRUE VERSION NUMBER
  18236.     AX = 3306h
  18237. Return:    BL = major version
  18238.     BH = minor version
  18239.     DL = revision (bits 2-0, all others 0)
  18240.     DH = version flags
  18241.         bit 3: DOS is in ROM
  18242.         bit 4: DOS in in HMA
  18243. Notes:    this function always returns the true version number, unlike AH=30h,
  18244.       whose return value may be changed with SETVER
  18245.     because of the conflict from the CBIS PowerLAN redirector (see next
  18246.       entry), programs should check whether BH is less than 100 (64h)
  18247.       and BL is at least 5 before accepting the returned BX as the true
  18248.       version number; however, even this is not entirely reliable when
  18249.       that redirector is loaded
  18250.     fully reentrant
  18251. BUG:    DR-DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h
  18252.       subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh
  18253.       for invalid subfunctions
  18254. SeeAlso: AH=30h,INT 2F/AX=112Fh
  18255. ----------213306-----------------------------
  18256. INT 21 - CBIS POWERLAN - NETWORK REDIRECTOR - ???
  18257.     AX = 3306h
  18258. Return: AX = 3306h
  18259.     BL = ??? (usually 00h)
  18260.     BH = ??? (usually 00h or FFh)
  18261. Note:    unknown function, is in conflict with DOS 5.0 version call
  18262. SeeAlso: AX=3306h"DOS"
  18263. ----------21330F-----------------------------
  18264. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  18265.     AX = 330Fh
  18266. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  18267. SeeAlso: AX=30F1h,AX=33E0h
  18268. ----------2133E0-----------------------------
  18269. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  18270.     AX = 33E0h
  18271. Return: AL = E0h if resident (DOS returns AL=FFh)
  18272. SeeAlso: AX=330Fh,AX=357Fh
  18273. ----------2134-------------------------------
  18274. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  18275.     AH = 34h
  18276. Return: ES:BX -> one-byte InDOS flag
  18277. Notes:    the value of InDOS is incremented whenever an INT 21 function begins
  18278.       and decremented whenever one completes
  18279.     during an INT 28 call, it is safe to call some INT 21 functions even
  18280.       though InDOS may be 01h instead of zero
  18281.     InDOS alone is not sufficient for determining when it is safe to
  18282.       enter DOS, as the critical error handling decrements InDOS and
  18283.       increments the critical error flag for the duration of the critical
  18284.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  18285.       busy.
  18286.     the critical error flag is the byte immediately following InDOS in
  18287.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ (except COMPAQ
  18288.       DOS 3.0, where the critical error flag is located 1AAh bytes BEFORE
  18289.       the critical section flag)
  18290.     For DOS 3.1+, an undocumented call exists to get the address of the
  18291.       critical error flag (see AX=5D06h)
  18292.     this function was undocumented prior to the release of DOS 5.0.
  18293. SeeAlso: AX=5D06h,AX=5D0Bh,INT 15/AX=DE1Fh,INT 28
  18294. ----------2135-------------------------------
  18295. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  18296.     AH = 35h
  18297.     AL = interrupt number
  18298. Return: ES:BX -> current interrupt handler
  18299. SeeAlso: AH=25h,AX=2503h
  18300. ----------213501-----------------------------
  18301. INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
  18302.     AX = 3501h
  18303. Return: CF clear if successful
  18304.         BX = new selector
  18305.     CF set on error (no more selectors available)
  18306. Note:    the new selector will be an expand-up read/write data selector with
  18307.       undefined base and limit
  18308. SeeAlso: AX=3502h,INT 31/AX=0000h
  18309. ----------213502-----------------------------
  18310. INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
  18311.     AX = 3502h
  18312.     BX = selector
  18313. Return: CF clear if successful
  18314.     CF set on error (invalid selector)
  18315. Note:    only selectors allocated via AX=3501h should be deallocated
  18316. SeeAlso: AX=3501h,INT 31/AX=0001h
  18317. ----------213503-----------------------------
  18318. INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
  18319.     AX = 3503h
  18320.     BX = selector
  18321.     ECX = base address
  18322. Return: CF clear if successful
  18323.     CF set on error (invalid selector)
  18324. SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h
  18325. ----------213504-----------------------------
  18326. INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS
  18327.     AX = 3504h
  18328.     BX = selector
  18329. Return: CF clear if successful
  18330.         ECX = absolute base address of selector
  18331.     CF set on error (invalid selector)
  18332. SeeAlso: AX=3503h,INT 31/AX=0006h
  18333. ----------213505-----------------------------
  18334. INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT
  18335.     AX = 3505h
  18336.     BX = selector
  18337.     ECX = desired limit
  18338. Return: CF clear if successful
  18339.         ECX = actual limit set
  18340.     CF set on error (no more selectors available)
  18341. Note:    the limit will be rounded down to nearest 4K boundary if the requested
  18342.       limit is greater than 1MB
  18343. SeeAlso: AX=3503h,INT 31/AX=0008h
  18344. ----------21350A-----------------------------
  18345. INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING
  18346.     AX = 350Ah
  18347.     EBX = absolute physical address
  18348.     ECX = size in bytes of area to map
  18349. Return: CF clear if successful
  18350.     CF set on error (insufficient memory or service refused by DPMI host)
  18351. Notes:    should not make repeated calls for the same physical address
  18352.     there is no provision for unmapping memory
  18353. ----------21350B-----------------------------
  18354. INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY
  18355.     AX = 350Bh
  18356.     DS = default selector for DS
  18357. Return: CF clear
  18358.     EAX = maximum amount of memory which can be allocated via AX=350Ch
  18359. SeeAlso: AX=350Ch
  18360. ----------21350C-----------------------------
  18361. INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
  18362.     AX = 350Ch
  18363.     ECX = size of block in bytes
  18364.     DS = default DS
  18365. Return: CF clear if successful
  18366.         EAX = near pointer to new block
  18367.         EDX = new lowest legal value for stack
  18368.     CF set on error (requested size not multiple of 4K)
  18369. SeeAlso: AX=350Bh,AX=350Dh
  18370. ----------21350D-----------------------------
  18371. INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK
  18372.     AX = 350Dh
  18373.     EBX = current ESP value
  18374.     ECX = size of block in bytes
  18375.     DS = default DS
  18376. Return: CF clear if successful
  18377.         EBX = new value for ESP
  18378.         EDX = suggested new limit for SS
  18379.     CF set on error
  18380. Note:    this function should only be called once during initialization
  18381. SeeAlso: AX=350Bh,AX=350Ch
  18382. ----------21357F-----------------------------
  18383. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  18384.     AX = 357Fh
  18385. Return: DX = FFFFh if installed
  18386. SeeAlso: AX=33E0h,AX=3DFFh
  18387. ----------2136-------------------------------
  18388. INT 21 - DOS 2+ - GET FREE DISK SPACE
  18389.     AH = 36h
  18390.     DL = drive number (00h = default, 01h = A:, etc)
  18391. Return: AX = FFFFh if invalid drive
  18392.     else
  18393.         AX = sectors per cluster
  18394.         BX = number of free clusters
  18395.         CX = bytes per sector
  18396.         DX = total clusters on drive
  18397. Notes:    free space on drive in bytes is AX * BX * CX
  18398.     total space on drive in bytes is AX * CX * DX
  18399.     "lost clusters" are considered to be in use
  18400.     according to Dave Williams' MSDOS reference, the value in DX is
  18401.       incorrect for non-default drives after ASSIGN is run
  18402. SeeAlso: AH=1Bh,AH=1Ch
  18403. ----------213700-----------------------------
  18404. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  18405.     AX = 3700h
  18406. Return: AL = status
  18407.         00h successful
  18408.         DL = current switch character
  18409.         FFh unsupported subfunction
  18410. Desc:    Determine the character which is used to introduce command switches.
  18411.       This setting is ignored by DOS commands in version 4.0 and higher,
  18412.       but is honored by many third-party programs.
  18413. Notes:    documented in some OEM versions of some releases of DOS
  18414.     supported by OS/2 compatibility box
  18415.     always returns DL=2Fh for DOS 5.0
  18416. SeeAlso: AX=3701h
  18417. ----------213701-----------------------------
  18418. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  18419.     AX = 3701h
  18420.     DL = new switch character
  18421. Return: AL = status
  18422.         00h successful
  18423.         FFh unsupported subfunction
  18424. Notes:    documented in some OEM versions of some releases of DOS
  18425.     supported by OS/2 compatibility box
  18426.     ignored by DOS 5.0
  18427. SeeAlso: AX=3700h
  18428. ----------2137-------------------------------
  18429. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  18430.     AH = 37h
  18431.     AL = subfunction
  18432.         02h get availdev flag
  18433.         Return: DL = 00h \DEV\ must precede character device names
  18434.                = nonzero \DEV\ is optional
  18435.         03h set availdev flag
  18436.         DL = 00h    \DEV\ is mandatory
  18437.            = nonzero    \DEV\ is optional
  18438. Return: AL = status
  18439.         00h successful
  18440.         FFh unsupported subfunction
  18441. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  18442.       names without generating an error even if the directory \DEV does
  18443.       not actually exist (other paths generate an error if they do not
  18444.       exist).
  18445.     although DOS 3.3+ accepts these calls, they have no effect, and
  18446.       AL=02h always returns DL=FFh
  18447. ----------2138-------------------------------
  18448. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  18449.     AH = 38h
  18450. --DOS 2.x--
  18451.     AL = 00h get current-country info
  18452.     DS:DX -> buffer for returned info (see below)
  18453. Return: CF set on error
  18454.         AX = error code (02h)
  18455.     CF clear if successful
  18456.         AX = country code (MSDOS 2.11 only)
  18457.         buffer at DS:DX filled
  18458. --DOS 3+--
  18459.     AL = 00h for current country
  18460.     AL = 01h thru 0FEh for specific country with code <255
  18461.     AL = 0FFh for specific country with code >= 255
  18462.        BX = 16-bit country code
  18463.     DS:DX -> buffer for returned info (see below)
  18464. Return:    CF set on error
  18465.         AX = error code (02h)
  18466.     CF clear if successful
  18467.         BX = country code
  18468.         DS:DX buffer filled
  18469. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  18470.  
  18471. Format of PCDOS 2.x country info:
  18472. Offset    Size    Description
  18473.  00h    WORD    date format  0 = USA    mm dd yy
  18474.                  1 = Europe dd mm yy
  18475.                  2 = Japan    yy mm dd
  18476.  02h    BYTE    currency symbol
  18477.  03h    BYTE    00h
  18478.  04h    BYTE    thousands separator char
  18479.  05h    BYTE    00h
  18480.  06h    BYTE    decimal separator char
  18481.  07h    BYTE    00h
  18482.  08h 24 BYTEs    reserved
  18483.  
  18484. Format of MSDOS 2.x,DOS 3+ country info:
  18485. Offset    Size    Description
  18486.  00h    WORD    date format (see above)
  18487.  02h  5 BYTEs    ASCIZ currency symbol string
  18488.  07h  2 BYTEs    ASCIZ thousands separator
  18489.  09h  2 BYTEs    ASCIZ decimal separator
  18490.  0Bh  2 BYTEs    ASCIZ date separator
  18491.  0Dh  2 BYTEs    ASCIZ time separator
  18492.  0Fh    BYTE    currency format
  18493.         bit 2 = set if currency symbol replaces decimal point
  18494.         bit 1 = number of spaces between value and currency symbol
  18495.         bit 0 = 0 if currency symbol precedes value
  18496.             1 if currency symbol follows value
  18497.  10h    BYTE    number of digits after decimal in currency
  18498.  11h    BYTE    time format
  18499.         bit 0 = 0 if 12-hour clock
  18500.             1 if 24-hour clock
  18501.  12h    DWORD    address of case map routine
  18502.         (FAR CALL, AL = character to map to upper case [>= 80h])
  18503.  16h  2 BYTEs    ASCIZ data-list separator
  18504.  18h 10 BYTEs    reserved
  18505.  
  18506. Values for country code:
  18507.  001h    United States
  18508.  002h    Canadian-French
  18509.  003h    Latin America
  18510.  01Fh    Netherlands
  18511.  020h    Belgium
  18512.  021h    France
  18513.  022h    Spain
  18514.  024h    Hungary (not supported by DR-DOS 5.0)
  18515.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  18516.  027h    Italy
  18517.  029h    Switzerland
  18518.  02Ah    Czechoslovakia (not supported by DR-DOS 5.0)
  18519.  02Bh    Austria (DR-DOS 5.0)
  18520.  02Ch    United Kingdom
  18521.  02Dh    Denmark
  18522.  02Eh    Sweden
  18523.  02Fh    Norway
  18524.  030h    Poland (not supported by DR-DOS 5.0)
  18525.  031h    Germany
  18526.  037h    Brazil (not supported by DR-DOS 5.0)
  18527.  03Dh    International English [Australia in DR-DOS 5.0]
  18528.  051h    Japan (DR-DOS 5.0)
  18529.  052h    Korea (DR-DOS 5.0)
  18530.  15Fh    Portugal
  18531.  166h    Finland
  18532.  311h    Middle East (DR-DOS 5.0)
  18533.  3CCh    Israel (DR-DOS 5.0)
  18534. ----------2138-------------------------------
  18535. INT 21 - DOS 3+ - SET COUNTRY CODE
  18536.     AH = 38h
  18537.     AL = 01h thru 0FEh for specific country with code <255
  18538.     AL = FFh for specific country with code >= 255
  18539.        BX = 16-bit country code
  18540.     DX = FFFFh
  18541. Return: CF set on error
  18542.         AX = error code (see AH=59h)
  18543.     CF clear if successful
  18544. Note:    not supported by OS/2
  18545. SeeAlso: INT 2F/AX=1403h
  18546. ----------2139-------------------------------
  18547. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  18548.     AH = 39h
  18549.     DS:DX -> ASCIZ pathname
  18550. Return: CF clear if successful
  18551.         AX destroyed
  18552.     CF set on error
  18553.         AX = error code (03h,05h) (see AH=59h)
  18554. Notes:    all directories in the given path except the last must exist
  18555.     fails if the parent directory is the root and is full
  18556.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  18557.       it is not possible to make that directory the current directory
  18558.       because the path would exceed 64 characters
  18559.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18560. SeeAlso: AH=3Ah,AH=3Bh,AH=E2h/SF=0Ah,INT 2F/AX=1103h
  18561. ----------213A-------------------------------
  18562. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  18563.     AH = 3Ah
  18564.     DS:DX -> ASCIZ pathname of directory to be removed
  18565. Return: CF clear if successful
  18566.         AX destroyed
  18567.     CF set on error
  18568.         AX = error code (03h,05h,06h,10h) (see AH=59h)
  18569. Notes:    directory must be empty (contain only '.' and '..' entries)
  18570.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18571. SeeAlso: AH=39h,AH=3Bh,AH=E2h/SF=0Bh,INT 2F/AX=1101h
  18572. ----------213B-------------------------------
  18573. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  18574.     AH = 3Bh
  18575.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  18576. Return: CF clear if successful
  18577.         AX destroyed
  18578.     CF set on error
  18579.         AX = error code (03h) (see AH=59h)
  18580. Notes:    if new directory name includes a drive letter, the default drive is
  18581.       not changed, only the current directory on that drive
  18582.     changing the current directory also changes the directory in which
  18583.       FCB file calls operate
  18584.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18585. SeeAlso: AH=47h,INT 2F/AX=1105h
  18586. ----------213C-------------------------------
  18587. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  18588.     AH = 3CH
  18589.     CX = file attribute
  18590.         bit 0: read-only
  18591.         1: hidden
  18592.         2: system
  18593.         3: volume label (ignored)
  18594.         4: reserved, must be zero (directory)
  18595.         5: archive bit
  18596.         7: if set, file is shareable under Novell NetWare
  18597.     DS:DX -> ASCIZ filename
  18598. Return: CF clear if successful
  18599.         AX = file handle
  18600.     CF set on error
  18601.         AX = error code (03h,04h,05h) (see AH=59h)
  18602. Notes:    if a file with the given name exists, it is truncated to zero length
  18603.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18604. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h
  18605. ----------213D-------------------------------
  18606. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  18607.     AH = 3Dh
  18608.     AL = access and sharing modes
  18609.         bits 2-0: access mode
  18610.         000 read only
  18611.         001 write only
  18612.         010 read/write
  18613.         bit 3: reserved (0)
  18614.         bits 6-4: sharing mode (DOS 3+)
  18615.         000 compatibility mode
  18616.         001 "DENYALL" prohibit both read and write access by others
  18617.         010 "DENYWRITE" prohibit write access by others
  18618.         011 "DENYREAD" prohibit read access by others
  18619.         100 "DENYNONE" allow full access by others
  18620.         bit 7: inheritance
  18621.         if set, file is private to current process and will not be
  18622.           inherited by child processes
  18623.     DS:DX -> ASCIZ filename
  18624.     CL = attribute mask of files to look for (server call only)
  18625. Return: CF clear if successful
  18626.         AX = file handle
  18627.     CF set on error
  18628.         AX = error code (01h,02h,03h,04h,05h,0Ch) (see AH=59h)
  18629. Notes:    file pointer is set to start of file
  18630.     file handles which are inherited from a parent also inherit sharing
  18631.       and access restrictions
  18632.     files may be opened even if given the hidden or system attributes
  18633.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18634. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1226h
  18635.  
  18636. File sharing behavior:
  18637.       |    Second and subsequent Opens
  18638.  First      |Compat  Deny      Deny     Deny    Deny
  18639.  Open      |       All      Write     Read    None
  18640.       |R W RW R W RW R W RW R W RW R W RW
  18641.  - - - - -| - - - - - - - - - - - - - - - - -
  18642.  Compat    R |Y Y Y  N N N     1 N N    N N N  1 N N
  18643.     W |Y Y Y  N N N     N N N    N N N  N N N
  18644.     RW|Y Y Y  N N N     N N N    N N N  N N N
  18645.  - - - - -|
  18646.  Deny    R |C C C  N N N     N N N    N N N  N N N
  18647.  All    W |C C C  N N N     N N N    N N N  N N N
  18648.     RW|C C C  N N N     N N N    N N N  N N N
  18649.  - - - - -|
  18650.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N 
  18651.  Write    W |C C C  N N N     N N N    Y N N  Y N N 
  18652.     RW|C C C  N N N     N N N    N N N  Y N N
  18653.  - - - - -|
  18654.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  18655.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  18656.     RW|C C C  N N N     N N N    N N N  N Y N
  18657.  - - - - -|
  18658.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  18659.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  18660.     RW|C C C  N N N     N N N    N N N  Y Y Y
  18661. Legend: Y = open succeeds, N = open fails with error code 05h
  18662.     C = open fails, INT 24 generated
  18663.     1 = open succeeds if file read-only, else fails with error code
  18664.     2 = open succeeds if file read-only, else fails with INT 24
  18665. ----------213DFF-----------------------------
  18666. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  18667.     AX = 3DFFh
  18668. Return: AX = 4A44h if resident
  18669. SeeAlso: AX=357Fh,AX=4203h
  18670. ----------213E-------------------------------
  18671. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  18672.     AH = 3Eh
  18673.     BX = file handle
  18674. Return: CF clear if successful
  18675.         AX destroyed
  18676.     CF set on error
  18677.         AX = error code (06h) (see AH=59h)
  18678. Note:    if the file was written to, any pending disk writes are performed, the
  18679.       time and date stamps are set to the current time, and the directory
  18680.       entry is updated
  18681. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  18682. ----------213F-------------------------------
  18683. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  18684.     AH = 3Fh
  18685.     BX = file handle
  18686.     CX = number of bytes to read
  18687.     DS:DX -> buffer for data
  18688. Return: CF clear if successful
  18689.         AX = number of bytes actually read (0 if at EOF before call)
  18690.     CF set on error
  18691.         AX = error code (05h,06h) (see AH=59h)
  18692. Notes:    data is read beginning at current file position, and the file position
  18693.       is updated after a successful read
  18694.     the returned AX may be smaller than the request in CX if a partial
  18695.       read occurred
  18696.     if reading from CON, read stops at first CR
  18697.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18698. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  18699. ----------213F-------------------------------
  18700. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  18701.     AH = 3Fh
  18702.     BX = handle for character device "TDHDEBUG"
  18703.     CX = number of bytes to read
  18704.     DS:DX -> buffer for status block (see below)
  18705. Return: CF clear if successful
  18706.         AX = number of bytes actually read
  18707.     CF set on error
  18708.         AX = error code (05h,06h) (see AH=59h)
  18709. SeeAlso: AH=40h"Turbo Debug"
  18710.  
  18711. Format of status block:
  18712. Offset    Size    Description
  18713.  00h    BYTE    status of command
  18714.         00h successful
  18715.         01h invalid handle
  18716.         02h no more breakpoints available
  18717.         03h hardware does not support specified breakpoint type
  18718.         04h previous command prevents execution
  18719.         05h debugger hardware not found
  18720.         06h hardware failure
  18721.         07h invalid command
  18722.         08h driver not initialized yet
  18723.         FEh recursive entry (hardware breakpoint inside hw bp handler)
  18724. ---status for command 01h---
  18725.  01h    WORD    device driver interface version number (currently 1)
  18726.  03h    WORD    device driver software version
  18727.  05h    BYTE    maximum simultaneous hardware breakpoints
  18728.  06h    BYTE    configuration bits
  18729.         bit 0: CPU and DMA accesses are distinct
  18730.             1: can detect DMA transfers
  18731.             2: supports data mask
  18732.             3: hardware pass counter on breakpoints
  18733.             4: can match on data as well as addresses
  18734.  07h    BYTE    supported breakpoint types
  18735.         bit 0: memory read
  18736.             1: memory write
  18737.             2: memory read/write
  18738.             3: I/O read
  18739.             4: I/O write
  18740.             5: I/O read/write
  18741.             6: instruction fetch
  18742.  08h    WORD    supported addressing match modes
  18743.         bit 0: any address
  18744.             1: equal to test value
  18745.             2: not equal
  18746.             3: above test value
  18747.             4: below test value
  18748.             5: below or equal
  18749.             6: above or equal
  18750.             7: within range
  18751.             8: outside range
  18752.  0Ah    WORD    supported data matches
  18753.         bit 0: any data
  18754.             1: equal to test value
  18755.             2: not equal
  18756.             3: above test value
  18757.             4: below test value
  18758.             5: below or equal
  18759.             6: above or equal
  18760.             7: within range
  18761.             8: outside range
  18762.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  18763.  0Dh    WORD    size of onboard memory (in K)
  18764.  0Fh    WORD    maximum number of trace-back events
  18765.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  18766.         supported)
  18767. ---status for command 04h---
  18768.  01h    BYTE    handle to use when referring to the just-set breakpoint
  18769. ----------213F-------------------------------
  18770. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  18771.     AH = 3Fh
  18772.     BX = handle for character device "$IPCUST"
  18773.     CX = number of bytes to read
  18774.     DS:DX -> buffer for configuration data (see below)
  18775. Return: CF clear if successful
  18776.         AX = number of bytes actually read
  18777.     CF set on error
  18778.         AX = error code (05h,06h) (see AH=59h)
  18779. Notes:    if less than the entire data is read or written, the next read/write
  18780.       continues where the previous one ended; IOCTL calls AX=4402h and
  18781.       AX=4403h both reset the location at which the next operation starts
  18782.       to zero
  18783.     the data pointer is also reset to zero if the previous read or write
  18784.       reached or exceeded the end of the data, when the current function
  18785.       is read and the previous was write, or vice versa
  18786. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST"
  18787.  
  18788. Format of configuration data:
  18789. Offset    Size    Description
  18790.  00h 12 BYTEs    IPCUST.SYS device driver header
  18791.  12h    BYTE    ???
  18792.  13h    BYTE    ???
  18793.  14h    WORD    ???
  18794.  16h    BYTE    bit flags
  18795.         bit 0: send BS rather than DEL for BackSpace key
  18796.         bit 1: wrap long lines
  18797.  17h    BYTE    ???
  18798.  18h 64 BYTEs    ASCIZ hostname
  18799.  58h 64 BYTEs    ASCIZ domain name
  18800.         (fully qualified domain name is hostname.domain-name)
  18801.  98h 16 BYTEs    ASCIZ username
  18802.  A8h 64 BYTEs    ASCIZ full name
  18803.  E8h 64 BYTEs    ASCIZ office address
  18804. 128h 32 BYTEs    ASCIZ phone number
  18805. 148h    WORD    offset from GMT in minutes
  18806. 14Ah  4 BYTEs    ASCIZ timezone name
  18807. 14Eh    WORD    number of time servers
  18808. 150h  ? DWORDs    IP addresses for time servers (big-endian)
  18809.     ???
  18810. 164h    WORD    number of old-style name servers
  18811. 166h  3 DWORDs    IP addresses for name servers (big-endian)
  18812. 172h    WORD    number of domain name servers
  18813. 174h  3 DWORDs    IP addresses for domain name servers (big-endian)
  18814. 180h    DWORD    IP address of default gateway (big-endian)
  18815. 184h    DWORD    IP address of log server (big-endian)
  18816. 188h    DWORD    IP address of cookie server (big-endian)
  18817. 18Ch    DWORD    IP address of lpr server (big-endian)
  18818. 190h    DWORD    IP address of imagen print server
  18819. 194h 54 BYTEs    ???
  18820. 1E8h    WORD    TCP default window size in bytes
  18821. 1EAh    WORD    TCP low window size
  18822. 1ECh 64 BYTEs    ASCIZ host tabel filename
  18823. 22Ch  2 BYTEs    ???
  18824. 22Eh 80 BYTEs    ASCIZ mail relay host name
  18825. 27Eh    BYTE    ???
  18826. 27Fh    BYTE    ??? bit flags
  18827. 280h 44 BYTEs    ???
  18828. 2ACh    WORD    ???
  18829. 2AEh 202 BYTEs    ???
  18830. ----------2140-------------------------------
  18831. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  18832.     AH = 40h
  18833.     BX = file handle
  18834.     CX = number of bytes to write
  18835.     DS:DX -> data to write
  18836. Return: CF clear if successful
  18837.         AX = number of bytes actually written
  18838.     CF set on error
  18839.         AX = error code (05h,06h) (see AH=59h)
  18840. Notes:    if CX is zero, no data is written, and the file is truncated or
  18841.       extended to the current position
  18842.     data is written beginning at the current file position, and the file
  18843.       position is updated after a successful write
  18844.     the usual cause for AX < CX on return is a full disk
  18845. BUG:    a write of zero bytes will appear to succeed when it actually failed
  18846.       if the write is extending the file and there is not enough disk
  18847.       space for the expanded file (DOS 5.0); one should therefore check
  18848.       whether the file was in fact extended by seeking to 0 bytes from
  18849.       the end of the file (INT 21/AX=4202h/CX=0/DX=0)
  18850.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18851. SeeAlso: AH=28h,AH=3Fh,AH=93h,INT 2F/AX=1109h
  18852. ----------2140-------------------------------
  18853. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  18854.     AH = 40h
  18855.     BX = handle for character device "TDHDEBUG"
  18856.     CX = number of bytes to write
  18857.     DS:DX -> hardware breakpoint command (see below)
  18858. Return: CF clear if successful
  18859.         AX = number of bytes actually written
  18860.     CF set on error
  18861.         AX = error code (05h,06h) (see AH=59h)
  18862. Note:    results are retrieved by reading from the device
  18863. SeeAlso: AH=3Fh"Turbo Debug"
  18864.  
  18865. Format of hardware breakpoint commands:
  18866. Offset    Size    Description
  18867.  00h    BYTE    command code
  18868.         00h install interrupt vectors
  18869.         01h get hardware capabilities
  18870.         02h enable hardware breakpoints
  18871.         03h disable hardware breakpoints
  18872.         04h set hardware breakpoint
  18873.         05h clear hardware breakpoint
  18874.         06h set I/O base address and reset hardware
  18875.         07h restore interrupt vectors
  18876. ---command code 00h---
  18877.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  18878.         hardware breakpoint; call with CPU state the same as on
  18879.         the breakpoint except for pushing AX and placing an entry
  18880.         code (FFh if breakout button or breakpoint handle) in AH
  18881. ---command code 04h---
  18882.  01h    BYTE    breakpoint type
  18883.         00h memory read
  18884.         01h memory write
  18885.         02h memory read/write
  18886.         03h I/O read
  18887.         04h I/O write
  18888.         05h I/O read/write
  18889.         06h instruction fetch
  18890.  02h    BYTE    address matching mode
  18891.         00h any address
  18892.         01h equal to test value
  18893.         02h different from test value
  18894.         03h above test value
  18895.         04h below test value
  18896.         05h below or equal to test value
  18897.         06h above or equal to test value
  18898.         07h within inclusive range
  18899.         08h outside specified range
  18900.  03h    DWORD    32-bit linear low address
  18901.  07h    DWORD    32-bit linear high address
  18902.  0Bh    WORD    pass count
  18903.  0Dh    BYTE    data size (01h, 02h, or 04h)
  18904.  0Eh    BYTE    source of matched bus cycle
  18905.         01h CPU
  18906.         02h DMA
  18907.         03h either
  18908.  0Fh    BYTE    data-matching mode
  18909.         00h match any
  18910.         01h equal to test value
  18911.         02h different from test value
  18912.         03h above test value
  18913.         04h below test value
  18914.         05h below or equal to test value
  18915.         06h above or equal to test value
  18916.         07h within specified range
  18917.         08h outside specified range
  18918.  10h    DWORD    low data value
  18919.  14h    DWORD    high data value
  18920.  18h    DWORD    data mask specifying which bits of the data are tested
  18921. ---command code 05h---
  18922.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  18923.         04h)
  18924. ---command code 06h---
  18925.  01h    WORD    base address of hardware debugger board
  18926. ----------2140-------------------------------
  18927. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  18928.     AH = 40h
  18929.     BX = handle for character device "$IPCUST"
  18930.     CX = number of bytes to write
  18931.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  18932. Return: CF clear if successful
  18933.         AX = number of bytes actually written
  18934.     CF set on error
  18935.         AX = error code (05h,06h) (see AH=59h)
  18936. Notes:    if less than the entire data is read or written, the next read/write
  18937.       continues where the previous one ended; IOCTL calls AX=4402h and
  18938.       AX=4403h both reset the location at which the next operation starts
  18939.       to zero
  18940.     the data pointer is also reset to zero if the previous read or write
  18941.       reached or exceeded the end of the data, when the current function
  18942.       is read and the previous was write, or vice versa
  18943. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  18944. ----------214000BX0002-----------------------
  18945. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  18946.     AX = 4000h
  18947.     BX = 0002h
  18948.     CX = 0000h
  18949.     DS:DX = 0000h:0000h
  18950. Return: CF clear if installed
  18951.         AX = CS of resident code
  18952. Note:    FARTBELL is a joke program by Guenther Thiele which makes various
  18953.       noises when programs output a bell
  18954. SeeAlso: AX=4001h
  18955. ----------214001BX0002-----------------------
  18956. INT 21 - FARTBELL.EXE - FORCE NOISE
  18957.     AX = 4001h
  18958.     BX = 0002h
  18959.     CX = 0000h
  18960.     DS:DX = 0000h:0000h
  18961. Note:    FARTBELL is a joke program by Guenther Thiele which makes various
  18962.       noises when programs output a bell
  18963. SeeAlso: AX=4000h
  18964. ----------2141-------------------------------
  18965. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  18966.     AH = 41h
  18967.     DS:DX -> ASCIZ filename (no wildcards, but see below)
  18968.     CL = attribute mask for deletion (server call only, see below)
  18969. Return: CF clear if successful
  18970.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  18971.     CF set on error
  18972.         AX = error code (02h,03h,05h) (see AH=59h)
  18973. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  18974.       the filespec must be canonical (as returned by AH=60h), and only
  18975.       files matching the attribute mask in CL are deleted
  18976.     DOS does not erase the file's data; it merely becomes inaccessible
  18977.       because the FAT chain for the file is cleared
  18978.     deleting a file which is currently open may lead to filesystem
  18979.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  18980.       referencing the deleted file, thus allowing writes to a nonexistant
  18981.       file.
  18982.     under DRDOS and DR Multiuser DOS, this function will fail if the file
  18983.       is currently open
  18984.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  18985. SeeAlso: AH=13h,AX=4301h,AX=5D00h,AH=60h,AX=F244h,INT 2F/AX=1113h
  18986. ----------214101DXFFFE-----------------------
  18987. INT 21 - SoftLogic Data Guardian - ???
  18988.     AX = 4101h
  18989.     DX = FFFEh
  18990. Return: AX = 0000h if installed
  18991. Note:    resident code sets several internal variables on this call
  18992. ----------2142-------------------------------
  18993. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  18994.     AH = 42h
  18995.     AL = origin of move
  18996.         00h start of file
  18997.         01h current file position
  18998.         02h end of file
  18999.     BX = file handle
  19000.     CX:DX = offset from origin of new file position
  19001. Return: CF clear if successful
  19002.         DX:AX = new file position in bytes from start of file
  19003.     CF set on error
  19004.         AX = error code (01h,06h) (see AH=59h)
  19005. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  19006.       start of the file; no error is returned in that case, but subsequent
  19007.       attempts at I/O will produce errors
  19008.     if the new position is beyond the current end of file, the file will
  19009.       be extended by the next write (see AH=40h)
  19010. SeeAlso: AH=24h,INT 2F/AX=1228h
  19011. ----------214203-----------------------------
  19012. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  19013.     AX = 4203h
  19014. Return: AX = 1234h if resident
  19015. SeeAlso: AX=3DFFh,AX=4243h
  19016. ----------214243-----------------------------
  19017. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  19018.     AX = 4243h
  19019. Return: AX = 5678h if resident
  19020. SeeAlso: AX=4203h,AX=4B04h
  19021. ----------214300-----------------------------
  19022. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  19023.     AX = 4300h
  19024.     DS:DX -> ASCIZ filename
  19025. Return: CF clear if successful
  19026.         CX = attributes (see AX=4301h)
  19027.         AX = CX (DR-DOS 5.0)
  19028.     CF set on error
  19029.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  19030. Note:    under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  19031. SeeAlso: AX=4301h,AX=4310h,AH=B6h,INT 2F/AX=110Fh
  19032. ----------214301-----------------------------
  19033. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  19034.     AX = 4301h
  19035.     CX = new attributes
  19036.         bit 7: shareable (Novell NetWare)
  19037.         6: unused
  19038.         5: archive
  19039.         4: directory
  19040.         3: volume label
  19041.            execute-only (Novell NetWare)
  19042.         2: system
  19043.         1: hidden
  19044.         0: read-only
  19045.     DS:DX -> ASCIZ filename
  19046. Return: CF clear if successful
  19047.         AX destroyed
  19048.     CF set on error
  19049.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  19050. Notes:    will not change volume label or directory attribute bits, but will
  19051.       change the other attribute bits of a directory (the directory
  19052.       bit must be cleared to successfully change the other attributes of a
  19053.       directory, but the directory will not be changed to a normal file as
  19054.       a result)
  19055.     MSDOS 4.01 reportedly closes the file if it is currently open
  19056.     for security reasons, the Novell NetWare execute-only bit can never
  19057.       be cleared; the file must be deleted and recreated
  19058.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  19059. SeeAlso: AX=4300h,AX=4311h,INT 2F/AX=110Eh
  19060. ----------214302-----------------------------
  19061. INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS
  19062.     AX = 4302h
  19063.     DS:DX -> ASCIZ pathname
  19064. Return: CF clear if successful
  19065.         CX = access rights
  19066.         bit 0 owner delete requires password
  19067.         bit 1 owner execution requires password (FlexOS)
  19068.         bit 2 owner write requires password
  19069.         bit 3 owner read requires password
  19070.         bit 4 group delete requires password
  19071.         bit 5 group execution requires password (FlexOS)
  19072.         bit 6 group write requires password
  19073.         bit 7 group read requires password
  19074.         bit 8 world delete requires password
  19075.         bit 9 world execution requires password (FlexOS)
  19076.         bit 10 world write requires password
  19077.         bit 11 world read requires password
  19078.         AX = CX (DR-DOS 5.0)
  19079.     CF set on error
  19080.         AX = error code
  19081. Desc:    Determine which operations the calling program may perform on a
  19082.       specified file without being required to provide a password.
  19083. Notes:    this protection scheme has been coordinated on all current Digital
  19084.       Research/Novell operating systems (DR-DOS 3.41+, DRMDOS 5.x, and
  19085.       FlexOS 2+)
  19086.     only FlexOS actually uses the "execution" bits; DR-DOS 3.41+ treats
  19087.       them as "read" bits.
  19088.     DR-DOS 3.41-5.x only use bits 0-3.  Only DR-DOS 6.0 using a
  19089.       DRMDOS 5.x security system allowing for users and groups uses bits
  19090.       4-11.
  19091. SeeAlso: AX=4303h
  19092. ----------214303-----------------------------
  19093. INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  19094.     AX = 4303h
  19095.     CX = access rights
  19096.          bits 11-0: access rights (see AX=4302h)
  19097.          bit 15: new password is to be set
  19098.     DS:DX -> ASCIZ pathname
  19099.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  19100. Return: CF clear if successful
  19101.     CF set on error
  19102.         AX = error code
  19103. Note:    if the file is already protected, the old password must be added after
  19104.       the pathname, separated by a ";"
  19105. SeeAlso: AX=4302h,AX=4454h
  19106. ----------214304-----------------------------
  19107. INT 21 - DR-DOS 5.0 internal - GET ???
  19108.     AX = 4304h
  19109.     ???
  19110. Return: CF clear if successful
  19111.         CX = AX = ???
  19112.     CF set on error
  19113.         AX = error code (see AH=59h)
  19114. SeeAlso: AX=4305h
  19115. ----------214305-----------------------------
  19116. INT 21 - DR-DOS 5.0 internal - SET ???
  19117.     AX = 4305h
  19118.     ???
  19119. Return: CF clear if successful
  19120.     CF set on error
  19121.         AX = error code (see AH=59h)
  19122. SeeAlso: AX=4304h
  19123. ----------214310-----------------------------
  19124. INT 21 - Banyan VINES 2.1+ - GET EXTENDED FILE ATTRIBUTES
  19125.     AX = 4310h
  19126.     DS:DX -> ASCIZ filename
  19127. Return: CF clear if successful
  19128.         CH = attributes (see AX=4311h)
  19129.     CF set on error
  19130.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  19131. Note:    the filename may be a directory but must be on a VINES file service
  19132. SeeAlso: AX=4300h,AX=4311h,AH=B6h,INT 2F/AX=110Fh
  19133. ----------214311-----------------------------
  19134. INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES
  19135.     AX = 4311h
  19136.     CH = new attributes
  19137.         bit 7: unused
  19138.         bit 6: shareable
  19139.         bit 5: execute-only
  19140.         bits 4-0: unused
  19141.     DS:DX -> ASCIZ filename
  19142. Return: CF clear if successful
  19143.     CF set on error
  19144.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  19145. Note:    the filename may be a directory but must be on a VINES file service
  19146. SeeAlso: AX=4301h,AX=4310h,INT 2F/AX=110Eh
  19147. ----------214400-----------------------------
  19148. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  19149.     AX = 4400h
  19150.     BX = handle
  19151. Return: CF clear if successful
  19152.         DX = device information word
  19153.         character device
  19154.           14: device driver can process IOCTL requests (see AX=4402h)
  19155.           13: output until busy supported
  19156.           11: driver supports OPEN/CLOSE calls
  19157.            7: set (indicates device)
  19158.            6: EOF on input
  19159.            5: raw (binary) mode
  19160.            4: device is special (uses INT 29)
  19161.            3: clock device
  19162.            2: NUL device
  19163.            1: standard output
  19164.            0: standard input
  19165.         disk file
  19166.           15: file is remote (DOS 3+)
  19167.           14: don't set file date/time on closing (DOS 3+)
  19168.           11: media not removable
  19169.            8: (DOS 4+) generate INT 24 if no disk space on write
  19170.            7: clear (indicates file)
  19171.            6: file has not been written
  19172.          5-0: drive number (0 = A:)
  19173.         AX destroyed
  19174.     CF set on error
  19175.         AX = error code (01h,05h,06h) (see AH=59h)
  19176. Note:    value in DH corresponds to high byte of device driver's attribute word
  19177.       if handle refers to a character device
  19178. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  19179. ----------214401-----------------------------
  19180. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  19181.     AX = 4401h
  19182.     BX = handle (must refer to character device)
  19183.     DX = device information word (see AX=4400h)
  19184.         (DH must be zero)
  19185. Return: CF clear if successful
  19186.     CF set on error
  19187.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19188. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  19189. ----------214402-----------------------------
  19190. INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
  19191.     AX = 4402h
  19192.     BX = file handle referencing character device
  19193.     CX = number of bytes to read
  19194.     DS:DX -> buffer
  19195. Return: CF clear if successful
  19196.         AX = number of bytes actually read
  19197.     CF set on error
  19198.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19199. Note:    format of data is driver-specific (see below for some specific cases)
  19200. SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
  19201. ----------214402-----------------------------
  19202. INT 21 - Network Driver Interface Spec 2.0.1 - PROTOCOL MANAGER
  19203.     AX = 4402h
  19204.     BX = file handle for device "PROTMAN$"
  19205.     DS:DX -> request block (see below)
  19206.     CX = 000Eh (size of request block)
  19207.  
  19208. Format of request block for GetProtocolManagerInfo:
  19209. Offset    Size    Description
  19210.  00h    WORD    01h
  19211.  02h    WORD    returned status (see below)
  19212.  04h    DWORD    returned pointer to structure representing parsed user config
  19213.  08h    DWORD    unused
  19214.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  19215.  
  19216. Format of request block for RegisterModule:
  19217. Offset    Size    Description
  19218.  00h    WORD    02h
  19219.  02h    WORD    returned status (see below)
  19220.  04h    DWORD    pointer to module's common characteristics table (see below)
  19221.  08h    DWORD    pointer to list of modules to which the module is to be bound
  19222.  0Ch    WORD    unused
  19223.  
  19224. Format of request block for BindAndStart:
  19225. Offset    Size    Description
  19226.  00h    WORD    03h
  19227.  02h    WORD    returned status (see below)
  19228.  04h    DWORD    caller's virtual address in FailingModules structure
  19229.  08h    DWORD    unused
  19230.  0Ch    WORD    unused
  19231.  
  19232. Format of request block for GetProtocolManagerLinkage:
  19233. Offset    Size    Description
  19234.  00h    WORD    04h
  19235.  02h    WORD    returned status (see below)
  19236.  04h    DWORD    returned dispatch point
  19237.  08h    DWORD    unused
  19238.  0Ch    WORD    returned protocol manager DS
  19239. Note:    the dispatch point may be called as follows instead of using this IOCTL
  19240.     STACK: WORD  protocol manager DS
  19241.            DWORD pointer to request block
  19242.     Return: AX = returned status
  19243.         STACK popped
  19244.  
  19245. Format of request block for GetProtocolIniPath:
  19246. Offset    Size    Description
  19247.  00h    WORD    05h
  19248.  02h    WORD    returned status (see below)
  19249.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  19250.  08h    DWORD    unused
  19251.  0Ch    WORD    buffer length
  19252.  
  19253. Format of request block for RegisterProtocolManagerInfo:
  19254. Offset    Size    Description
  19255.  00h    WORD    06h
  19256.  02h    WORD    returned status (see below)
  19257.  04h    DWORD    pointer to structure containing parsed user config file
  19258.  08h    DWORD    unused
  19259.  0Ch    WORD    length of structure
  19260.  
  19261. Format of request block for InitAndRegister:
  19262. Offset    Size    Description
  19263.  00h    WORD    07h
  19264.  02h    WORD    returned status (see below)
  19265.  04h    DWORD    unused
  19266.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  19267.  0Ch    WORD    unused
  19268.  
  19269. Format of request block for UnbindAndStop:
  19270. Offset    Size    Description
  19271.  00h    WORD    08h
  19272.  02h    WORD    returned status (see below)
  19273.  04h    DWORD    failing modules as for BindAndStart
  19274.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  19275.         if 0000h:0000h, terminate a set of previously dynamically
  19276.           bound protocol modules
  19277.  0Ch    WORD    unused
  19278.  
  19279. Format of request block for BindStatus:
  19280. Offset    Size    Description
  19281.  00h    WORD    09h
  19282.  02h    WORD    returned status (see below)
  19283.  04h    DWORD    must be 0000h:0000h
  19284.         on return, points to root tree
  19285.  08h    DWORD    0000h:0000h
  19286.  0Ch    WORD    unused under DOS
  19287.  
  19288. Format of request block for RegisterStatus:
  19289. Offset    Size    Description
  19290.  00h    WORD    0Ah
  19291.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see below)
  19292.  04h    DWORD    0000h:0000h
  19293.  08h    DWORD    pointer to 16-byte ASCIZ module name
  19294.  0Ch    WORD    0000h
  19295. Note:    not supported by the 10NET v5.0 PROTMAN$ driver
  19296.  
  19297. Values of status code:
  19298.  0000h success
  19299.  0001h wait for release--protocol has retained control of the data buffer
  19300.  0002h request queued
  19301.  0003h frame not recognized
  19302.  0004h frame rejected
  19303.  0005h frame should be forwarded
  19304.  0006h out of resource
  19305.  0007h invalid parameter
  19306.  0008h invalid function
  19307.  0009h not supported
  19308.  000Ah hardware error
  19309.  000Bh transmit error
  19310.  000Ch unrecognized destination
  19311.  000Dh buffer too small
  19312.  0020h already started
  19313.  0021h binding incomplete
  19314.  0022h driver not initialized
  19315.  0023h hardware not found
  19316.  0024h hardware failure
  19317.  0025h configuration failure
  19318.  0026h interrupt conflict
  19319.  0027h MAC incompatible
  19320.  0028h initialization failed
  19321.  0029h no binding
  19322.  002Ah network may be disconnected
  19323.  002Bh incompatible OS version
  19324.  002Ch already registered
  19325.  002Dh path not found
  19326.  002Eh insufficient memory
  19327.  002Fh info not found
  19328.  00FFh general failure
  19329.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  19330.  
  19331. Format of common characteristics table:
  19332. Offset    Size    Description
  19333.  00h    WORD    size of table in bytes
  19334.  02h    BYTE    NDIS major version
  19335.  03h    BYTE    NDIS minor version
  19336.  04h    WORD    reserved
  19337.  06h    BYTE    module major version
  19338.  07h    BYTE    module minor version
  19339.  08h    DWORD    module function flag bits
  19340.         bit 0: binding at upper boundary supported
  19341.         bit 1: binding at lower boundary supported
  19342.         bit 2: dynamically bound
  19343.         bits 3-31 reserved, must be 0
  19344.  0Ch 16 BYTEs    ASCIZ module name
  19345.  1Ch    BYTE    upper boundary protocol level
  19346.         01h Media Access Control
  19347.         02h Data link
  19348.         03h network
  19349.         04h transport
  19350.         05h session
  19351.         FFh not specified
  19352.  1Dh    BYTE    upper boundary interface type
  19353.         for MACs: 1 = MAC
  19354.         for data links and transports: to be defined
  19355.         for session: 1 = NCB
  19356.         any level: 0 = private (ISV-defined)
  19357.  1Eh    BYTE    lower boundary protocol level
  19358.         00h physical
  19359.         01h Media Access Control
  19360.         02h Data link
  19361.         03h network
  19362.         04h transport
  19363.         05h session
  19364.         FFh not specified
  19365.  1Fh    BYTE    lower boundary interface type
  19366.         same as offset 1Dh
  19367.  20h    WORD    module ID filled in by protocol manager
  19368.  22h    WORD    module DS
  19369.  24h    DWORD    system request entry point
  19370.  28h    DWORD    pointer to service-specific characteristics
  19371.         0000h:0000h if none
  19372.  2Ch    DWORD    pointer to service-specific status
  19373.         0000h:0000h if none
  19374.  30h    DWORD    pointer to upper dispatch table (see below)
  19375.         0000h:0000h if none
  19376.  34h    DWORD    pointer to lower dispatch table (see below)
  19377.         0000h:0000h if none
  19378.  38h    DWORD    reserved, must be 0
  19379.  3Ch    DWORD    reserved, must be 0
  19380. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  19381.       interpreted as 01h
  19382.  
  19383. Format of MAC Service-Specific Characteristics Table:
  19384. Offset    Size    Description
  19385.  00h    WORD    length of table in bytes
  19386.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  19387.         "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  19388.         "HDLC", or "ISDN"
  19389.  12h    WORD    length of station addresses in bytes
  19390.  14h 16 BYTEs    permanent station address
  19391.  24h 16 BYTEs    current station address
  19392.  34h    DWORD    current functional adapter address (00000000h if none)
  19393.  38h    DWORD    pointer to multicast address list
  19394.  3Ch    DWORD    link speed in bits/sec
  19395.  40h    DWORD    service flags
  19396.         bit 0: supports broadcast
  19397.             1: supports multicast
  19398.             2: supports functional/group addressing
  19399.             3: supports promiscuous mode
  19400.             4: station address software settable
  19401.             5: statistics always current
  19402.             6: supports InitiateDiagnostics
  19403.             7: supports loopback
  19404.             8: MAC does primarily ReceiveChain indications instead of
  19405.                ReceiveLookahead indications
  19406.             9: supports IBM source routing
  19407.            10: supports MAC reset
  19408.            11: supports Open/Close adapter
  19409.            12: supports interrupt request
  19410.            13: supports source routing bridge
  19411.            14: supports GDT virtual addresses (OS/2 version)
  19412.            15: multiple TransferDatas allowed durign a single
  19413.                indication
  19414.            16: MAC normally sets FrameSize = 0 in ReceiveLookahead
  19415.            17-31: reserved, must be 0
  19416.  44h    WORD    maximum frame size which may be both sent and received
  19417.  46h    DWORD    total transmit buffer capacity in bytes
  19418.  4Ah    WORD    transmit buffer allocation block size in bytes
  19419.  4Ch    DWORD    total receive buffer capacity in bytes
  19420.  50h    WORD    receive buffer allocation block size in bytes
  19421.  52h  3 BYTEs    IEEE vendor code
  19422.  55h    BYTE    vendor adapter code
  19423.  56h    DWORD    pointer to ASCIZ vendor adapter description
  19424.  5Ah    WORD    IRQ used by adapter
  19425.  5Ch    WORD    transmit queue depth
  19426.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  19427.  60h  N BYTEs    vendor-specific info
  19428.  
  19429. Format of NetBIOS Service-Specific Characteristics Table
  19430. Offset    Size    Description
  19431.  00h    WORD    length of table in bytes
  19432.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  19433.  12h    WORD    NetBIOS module code
  19434.  14h  N BYTEs    vendor-specific info
  19435.  
  19436. Format of MAC Service-Specific Status Table:
  19437. Offset    Size    Description
  19438.  00h    WORD    length of table in bytes
  19439.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  19440.         (FFFFFFFFh = never)
  19441.  06h    DWORD    MAC status bits
  19442.         bits 0-2: 000 hardware not installed
  19443.               001 hardware failed startup diagnostics
  19444.               010 hardware configuration problem
  19445.               011 hardware fault
  19446.               100 operating marginally due to soft faults
  19447.               101 reserved
  19448.               110 reserved
  19449.               111 hardware fully operational
  19450.         bit 3:      MAC bound
  19451.             4:      MAC open
  19452.             5:      diagnostics in progress
  19453.             6-31: reserved
  19454.  0Ah    WORD    current packet filter flags
  19455.         bit 0: directed/multicast or group/functional
  19456.             1: broadcast
  19457.             2: promiscuous
  19458.             3: all source routing
  19459.             4-15: reserved, must be zero
  19460.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  19461.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  19462.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  19463.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  19464.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  19465.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  19466.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  19467.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  19468.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  19469.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  19470.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  19471.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  19472.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  19473.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  19474.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  19475.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  19476.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  19477.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  19478.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  19479.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  19480.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  19481.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  19482.  64h  N BYTEs    vendor-specific info
  19483. ----------214402-----------------------------
  19484. INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  19485.     AX = 4402h
  19486.     BX = handle for character device "GDMS"
  19487.     CX = number of bytes to read (>= 4)
  19488.     DS:DX -> buffer (see below)
  19489. Return: CF set on error
  19490.         AX = error code (see AH=59h)
  19491.     CF clear if successful
  19492.         AX = number of bytes read
  19493.  
  19494. Format of returned data:
  19495. Offset    Size    Description
  19496.  00h  4 BYTEs    ???
  19497.  04h    DWORD    pointer to ???
  19498.  08h  4 BYTEs    ???
  19499. ----------214402-----------------------------
  19500. INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
  19501.     AX = 4402h
  19502.     BX = handle for device "LA$TBYTE"
  19503.     CX = 0004h
  19504.     DS:DX -> DWORD to hold address of 39-byte table of ???
  19505. Return: CF set on error
  19506.         AX = error code (see AH=59h)
  19507.     CF clear if successful
  19508.         AX = number of bytes read
  19509. Note:    LASTBYTE.SYS is part of "The Last Byte" by Key Software Products
  19510. SeeAlso: AX=4402h"HIGHUMM"
  19511. ----------214402-----------------------------
  19512. INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
  19513.     AX = 4402h
  19514.     BX = handle for device "KSP$UMM"
  19515.     CX = 0004h
  19516.     DS:DX -> DWORD to hold entry point
  19517. Return: CF set on error
  19518.         AX = error code (see AH=59h)
  19519.     CF clear if successful
  19520.         AX = number of bytes read
  19521. Note:    HIGHUMM.SYS is part of "The Last Byte" by Key Software Products
  19522. SeeAlso: AX=4402h"LASTBYTE"
  19523.  
  19524. Call HIGHUMM.SYS entry point with:
  19525.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  19526.         DX = size in paragraphs
  19527.         Return: BX = segment number (if successful)
  19528.             DX = size of requested block/size of largest block
  19529.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  19530.         DX = segment number of UMB
  19531.     AH = 02h request a bank-switched memory block
  19532.         DX = size in paragraphs
  19533.         Return: BX = segment number (if successful)
  19534.             DX = size of requested block/size of largest block
  19535.     AH = 03h release a bank-switched memory block
  19536.         DX = segment number
  19537.     AH = 04h transfer data to/from high memory
  19538.         DS:SI -> source
  19539.         ES:DI -> destination
  19540.         CX = length in bytes
  19541.         Note: enables bank-switched memory, does the copy, then disables
  19542.         bank-switched memory
  19543.     AH = 05h get a word from bank-switched memory
  19544.         ES:DI -> word to read
  19545.         Return: DX = word
  19546.     AH = 06h put a word to bank-switched memory
  19547.         ES:DI -> word to write
  19548.         DX = word
  19549.     AH = 07h put a byte to bank-switched memory
  19550.         ES:DI -> byte to write
  19551.         DL = byte
  19552.     AH = 08h enable bank-switched memory
  19553.         DS:SI -> 6-byte status save area
  19554.     AH = 09h disable bank-switched memory
  19555.         DS:SI -> 6-byte save area from enable call (AH=08h)
  19556.     AH = 0Ah assign name to UMB or high bank-switched block
  19557.         DX = segment number
  19558.         DS:SI -> 8-byte blank-padded name
  19559.     AH = 0Bh locate UMB block by name
  19560.         DS:SI -> 8-byte blank-padded name
  19561.         Return: BX = segment number (if successful)
  19562.             DX = size of block
  19563.     AH = 0Ch locate bank-switched block by name
  19564.         DS:SI -> 8-byte blank-padded name
  19565.         Return: BX = segment number (if successful)
  19566.             DX = size of block
  19567. Return: AX = status code
  19568.         0001h successful
  19569.         0000h failed
  19570.         BL = error code
  19571.             80h not implemented
  19572.             B0h insufficient memory, smaller block available
  19573.             B1h insufficient memory, no blocks available
  19574.             B2h invalid segment number
  19575. Note:    only functions 00h and 01h are always available; the remaining
  19576.       functions are only enabled if the proper commandline switch is given
  19577. ----------214402-----------------------------
  19578. INT 21 - SMARTDRV.SYS - IOCTL - GET CACHE STATUS
  19579.     AX = 4402h
  19580.     BX = file handle for device "SMARTAAR"
  19581.     CX = number of bytes to read (min 28h)
  19582.     DS:DX -> buffer for status record (see below)
  19583. Return: CF clear if successful
  19584.         AX = number of bytes actually read
  19585.     CF set on error
  19586.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19587. SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h
  19588.  
  19589. Format of SMARTDRV status record:
  19590. Offset    Size    Description
  19591.  00h    BYTE    write-through flag (always 01h)
  19592.  01h    BYTE    writes should be buffered (always 00h)
  19593.  02h    BYTE    cache enabled if 01h
  19594.  03h    BYTE    driver type (01h extended memory, 02h expanded)
  19595.  04h    WORD    clock ticks between cache flushes (currently unused)
  19596.  06h    BYTE    cache contains locked tracks if nonzero
  19597.  07h    BYTE    flush cache on INT 19 reboot if nonzero
  19598.  08h    BYTE    cache full track writes if nonzero
  19599.  09h    BYTE    double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
  19600.  0Ah    DWORD    original INT 13 vector
  19601.  0Eh    BYTE    minor version number
  19602.  0Fh    BYTE    major version number
  19603.  10h    WORD    unused
  19604.  12h    WORD    sectors read            \
  19605.  14h    WORD    sectors already in cache     > may be scaled rather than
  19606.  16h    WORD    sectors already in track buffer /  absolute counts
  19607.  18h    BYTE    cache hit rate in percent
  19608.  19h    BYTE    track buffer hit rate in percent
  19609.  1Ah    WORD    total tracks in cache
  19610.  1Ch    WORD    number of tracks in use
  19611.  1Eh    WORD    number of locked tracks
  19612.  20h    WORD    number of dirty tracks
  19613.  22h    WORD    current cache size in 16K pages
  19614.  24h    WORD    original (maximum) cache size in 16K pages
  19615.  26h    WORD    minimum cache size in 16K pages
  19616.  28h    DWORD    pointer to byte flag to increment for locking cache contents
  19617. ----------214402-----------------------------
  19618. INT 21 - CD-ROM device driver - IOCTL INPUT
  19619.     AX = 4402h
  19620.     BX = file handle referencing character device for CD-ROM driver
  19621.     CX = number of bytes to read
  19622.     DS:DX -> control block (see below)
  19623. Return: CF clear if successful
  19624.         AX = number of bytes actually read
  19625.     CF set on error
  19626.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19627. Note:    the data returned depends on the first byte of the control block; the
  19628.       remainder of the control block is filled by the driver
  19629. SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h
  19630.  
  19631. Format of control block:
  19632. Offset    Size    Description
  19633.  00h    BYTE    data being requested
  19634.         00h device driver header address
  19635.         01h drive head location
  19636.         02h reserved
  19637.         03h error statistics
  19638.         04h audio channel info
  19639.         05h raw drive bytes (uninterpreted and device-specific)
  19640.         06h device status
  19641.         07h sector size
  19642.         08h volume size
  19643.         09h media change status
  19644.         0Ah audio disk info
  19645.         0Bh audio track info
  19646.         0Ch audio Q-Channel info
  19647.         0Dh audio sub-channel info
  19648.         0Eh UPC code
  19649. ---function 00h---
  19650.  01h    DWORD    device driver header address (see also AH=52h)
  19651. ---function 01h---
  19652.  01h    BYTE    addressing mode
  19653.         00h HSG
  19654.         01h Red Book
  19655.  02h    DWORD    current location of drive's head
  19656.         logical sector number in HSG mode
  19657.         frame/second/minute/unused in Red Book mode
  19658.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  19659. ---function 03h---
  19660.  01h  N BYTEs    undefined as of 5 Aug 88 specification
  19661. ---function 04h---
  19662.  01h    BYTE    input channel (0-3) for output channel 0
  19663.  02h    BYTE    volume for output channel 0
  19664.  03h    BYTE    input channel (0-3) for output channel 1
  19665.  04h    BYTE    volume for output channel 1
  19666.  05h    BYTE    input channel (0-3) for output channel 2
  19667.  06h    BYTE    volume for output channel 2
  19668.  07h    BYTE    input channel (0-3) for output channel 3
  19669.  08h    BYTE    volume for output channel 3
  19670. Notes:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  19671.       right prime; a volume of 00h is off
  19672.     the default setting is for each input channel to be assigned to the
  19673.       same-numbered output channel at full (FFh) volume
  19674. ---function 05h---
  19675.  01h    BYTE    number of bytes read
  19676.  02h 128 BYTEs    buffer for drive bytes
  19677. ---function 06h---
  19678.  01h    DWORD    device parameters
  19679.         bit 0: door open
  19680.             1: door unlocked
  19681.             2: supports raw reading in addition to cooked
  19682.             3: writable
  19683.             4: can play audio/video tracks
  19684.             5: supports interleaving
  19685.             6: reserved
  19686.             7: supports prefetch requests
  19687.             8: supports audio channel control
  19688.             9: supports Red Book addressing in addition to HSG
  19689.            10: audio is playing
  19690. ---function 07h---
  19691.  01h    BYTE    read mode
  19692.         00h cooked
  19693.         01h raw
  19694.  02h    WORD    sector size in bytes
  19695. ---function 08h---
  19696.  01h    DWORD    volume size in sectors
  19697. ---function 09h---
  19698.  01h    BYTE    media change status
  19699.         00h don't know
  19700.         01h media unchanged
  19701.         FFh media has been changed
  19702. ---function 0Ah---
  19703.  01h    BYTE    lowest audio track number
  19704.  02h    BYTE    highest audio track number
  19705.  03h    DWORD    start address of lead-out track (Red Book format)
  19706. --function 0Bh---
  19707.  01h    BYTE    track number (set by caller)
  19708.  02h    DWORD    starting point of track (Red Book format)
  19709.  06h    BYTE    track control info
  19710.         bits 15,14,12: track type (notice: bits not contiguous!)
  19711.             000 two audio channels, no pre-emphasis
  19712.             001 two audio channels with pre-emphasis
  19713.             010 data track
  19714.             100 four audio channels, no pre-emphasis
  19715.             101 four audio channels with pre-emphasis
  19716.             other reserved
  19717.         bit 13: digital copy permitted
  19718. ---function 0Ch---
  19719.  01h    BYTE    CONTROL and ADR byte (as received from drive)
  19720.  02h    BYTE    track number
  19721.  03h    BYTE    point or index
  19722.  04h    BYTE    minute    \
  19723.  05h    BYTE    second     > running time within track
  19724.  06h    BYTE    frame    /
  19725.  07h    BYTE    zero
  19726.  08h    BYTE    "AMIN" or "PMIN"     \
  19727.  09h    BYTE    "ASEC" or "PSEC"      > running time on disk
  19728.  0Ah    BYTE    "AFRAME" or "PFRAME" /
  19729. ---function 0Dh---
  19730.  01h    DWORD    starting frame address (Red Book format)
  19731.  05h    DWORD    transfer address
  19732.  09h    DWORD    number of sectors to read
  19733. Note:    copies 96 bytes of sub-channel info per sector into buffer
  19734. ---function 0Eh---
  19735.  01h    BYTE    CONTROL and ADR byte
  19736.  02h  7 BYTEs    UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
  19737.  09h    BYTE    zero
  19738.  0Ah    BYTE    "AFRAME"
  19739. ----------214402-----------------------------
  19740. INT 21 U - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
  19741.     AX = 4402h
  19742.     BX = file handle for device "QEMM386$"
  19743.     CX = 0004h
  19744.     DS:DX -> DWORD buffer for API entry point
  19745. Return: CF clear if successful
  19746.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  19747.     CF set on error
  19748.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19749. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  19750. ----------214402-----------------------------
  19751. INT 21 U - Quarterdeck - QEMM-386 v6+ - GET ???
  19752.     AX = 4402h
  19753.     BX = file handle for device "EMMXXXX0"
  19754.     CX = 0006h (size of buffer in bytes)
  19755.     DS:DX -> buffer for ???
  19756.         first byte must be 01h on entry
  19757. Return: CF clear if successful
  19758.         buffer filled (see INT 67/AH=3Fh function 1B00h)
  19759.     CF set on error
  19760.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19761. Note:    this call always returns an error if Windows3 support has been disabled
  19762.       with the NW3 switch to QEMM386.SYS
  19763. SeeAlso: INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  19764. ----------214402-----------------------------
  19765. INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
  19766.     AX = 4402h
  19767.     BX = file handle for device "HOOKROM$"
  19768.     CX = 0004h
  19769.     DS:DX -> DWORD buffer for address of hooked vector table (see below)
  19770. Return: CF clear if successful
  19771.         DS:DX buffer filled
  19772.     CF set on error
  19773.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19774. SeeAlso: AX=4402h"QEMM"
  19775.  
  19776. Format of hooked vector table entry:
  19777. Offset    Size    Description
  19778.  00h  5 BYTEs    FAR jump to actual interrupt handler
  19779.         (end of table if first byte is not EAh)
  19780.  05h    BYTE    interrupt vector number
  19781. ----------214402-----------------------------
  19782. INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
  19783.     AX = 4402h
  19784.     BX = file handle for device "SCSIMGR$"
  19785.     CX = 0004h
  19786.     DS:DX -> buffer for function address
  19787. Return: CF clear if successful
  19788.         AX = 0004h
  19789.     CF set on error
  19790.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19791. Note:    the function address is called with the address of a SCSI Request
  19792.       Block on the stack and the caller must clean up the stack
  19793. SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000"
  19794.  
  19795. Format of SCSI Request Block (64 bytes):
  19796. Offset    Size    Description
  19797.  00h    BYTE    request number
  19798.         00h "HA_INQ"     host adapter inquiry
  19799.         01h "GET_TYPE"     get device type
  19800.         02h "EXEC_SIO"     execute SCSI I/O
  19801.         03h "ABORT_SRB"     abort SRB
  19802.         04h "RESET_DEV"     reset SCSI device
  19803.         05h "SET_HAPRMS" set host adapter parameters
  19804.  01h    BYTE    request status
  19805.         00h not done yet
  19806.         02h aborted
  19807.         04h SCSI I/O error
  19808.         80h invalid
  19809.         81h no adapter
  19810.         82h no device attached
  19811.         else status
  19812.  02h    BYTE    host adapter ID
  19813.  03h    BYTE    request flags
  19814.         bit 3: ???
  19815.  04h    DWORD    reserved
  19816. ---request 00h---
  19817.  08h    BYTE    (returned) number of host adapters
  19818.  09h    BYTE    (returned) target adapter ID
  19819.  0Ah 16 BYTEs    (returned) manager ID
  19820.  1Ah 16 BYTEs    (returned) adapter ID
  19821.  2Ah 16 BYTEs    (returned) parameters
  19822. ---request 01h---
  19823.  08h    BYTE    target ID
  19824.  09h    BYTE    logical unit number
  19825.  0Ah    BYTE    (returned) device type
  19826.         01h streamer
  19827. ---request 02h---
  19828.  08h    BYTE    target ID
  19829.  09h    BYTE    logical unit number
  19830.  0Ah    DWORD    data allocation length
  19831.  0Eh    BYTE    sense allocation length
  19832.  0Fh    DWORD    data buffer pointer
  19833.  13h    DWORD    next request pointer (for linking)
  19834.  17h    BYTE    CDB length
  19835.  18h    BYTE    (returned) host adapter status
  19836.         11h select timeout
  19837.         12h data overrun
  19838.         13h bus error
  19839.         14h bus failure
  19840.  19h    BYTE    (returned) target status
  19841.         02h sense data stored in SRB
  19842.         08h target busy
  19843.         18h reservation error
  19844.  1Ah    DWORD    post routine address
  19845.  1Eh    WORD    real mode Post DS
  19846.  20h    DWORD    SRB pointer
  19847.  24h    WORD    reserved
  19848.  26h    DWORD    SRB physical address
  19849.  2Ah 22 BYTEs    SCSIMGR$ workspace
  19850.  40h  N BYTEs    CCB (20-24 bytes)
  19851. ---request 04h---
  19852.  08h    BYTE    target ID
  19853.  09h    BYTE    logical unit number
  19854.  0Ah 14 BYTEs    reserved
  19855.  18h    BYTE    (returned) host adapter status (see above)
  19856.  19h    BYTE    (returned) target status (see above)
  19857.  1Ah    DWORD    post routine address
  19858.  1Eh 34 BYTEs    workspace
  19859.  
  19860. Format of CCB:
  19861. Offset    Size    Description
  19862.  00h    BYTE    command code
  19863.         01h rewind
  19864.         05h get block size limits
  19865.         08h read
  19866.         0Ah write
  19867.         10h write file marks
  19868.         11h SCSI Space (set position?)
  19869.         12h SCSI Inquire
  19870.         19h erase
  19871.         1Bh load/unload media
  19872.  01h    BYTE    flags
  19873.         bits 4-0: vary by function
  19874.         bits 7-5: logical unit number
  19875.  02h    BYTE    "adr_1"
  19876.  03h    BYTE    "adr_0"
  19877.  04h    BYTE    length
  19878.  05h    BYTE    control
  19879.     ...
  19880.  06h/0Ah 14 BYTEs buffer for sense data
  19881. ----------214402-----------------------------
  19882. INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE
  19883.     AX = 4402h
  19884.     BX = file handle for device "386MAX$$"
  19885.     CX = 005Ah
  19886.     DS:DX -> 386MAX state buffer (see below)
  19887. Return: CF clear if successful
  19888.         buffer filled
  19889.         AX = number of bytes actually copied
  19890.     CF set on error
  19891.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  19892. Notes:    the buffer must be one byte larger than the value given in CX; if the
  19893.       value is less than 5Ah, only a partial state record will be returned
  19894.     the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$"
  19895.       did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and
  19896.       56h bytes for v5.11.
  19897.     to invoke 386MAX API functions, push DX onto the stack, load DX with
  19898.       the word at offset 25h in the returned state, load all other
  19899.       registers as needed for the desired function, and execute an
  19900.       OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return
  19901.       if it is not otherwise modified by the API function.
  19902. SeeAlso: AX=4403h"386MAX",INT 67/AH=3Fh
  19903.  
  19904. Format of 386MAX v6.01 state:
  19905. Offset    Size    Description
  19906.  00h    BYTE    version number of state structure (must be set on entry;
  19907.           v6.01 returns an error if not 03h)
  19908.  01h  6 BYTEs    signature "386MAX"
  19909.  07h  4 BYTEs    version string "N;NN" (i.e. "6;01" for v6.01)
  19910.  0Bh    WORD    segment of low-memory portion of 386MAX.SYS
  19911.  0Dh  2 BYTEs    ???
  19912.  0Fh    WORD    segment of ??? memory block or 0000h
  19913.  11h    WORD    bit flags
  19914.         bit 1: ???
  19915.         bit 2: ???
  19916.         bit 3: ??? (cleared by calling INT 67 functions)
  19917.         bit 5: ???
  19918.         bit 6: 386MAX active???
  19919.         bit 7: 386MAX is providing EMS services
  19920.         bit 8: ???
  19921.         bit 9: ??? (see INT 15/AX=2402h)
  19922.         bit 10: ???
  19923.         bit 11: ???
  19924.         bit 12: ???
  19925.         bit 13: QPMS has been used
  19926.         bit 14: ???
  19927.         bit 15: ???
  19928.  13h    WORD    starting address of video memory in K
  19929.  15h  8 BYTEs    ???
  19930.  1Dh    WORD    KBytes extended memory used by 386MAX
  19931.  1Fh  2 BYTEs    ???
  19932.  21h    WORD    ???
  19933.  23h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions
  19934.  25h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX API functions
  19935.  27h    WORD    ???
  19936.  29h  2 BYTEs    ???
  19937.  2Bh    DWORD    ???
  19938.  2Fh  4 BYTEs    ???
  19939.  33h    WORD    system configuration??? flags
  19940.         bit 1: ROM compressed???
  19941.         bit 3: ???
  19942.         bit 5: 386MAX loaded into high memory
  19943.         bit 11: PC/XT (thus only single 8259 interrupt controller
  19944.                 present, DMA only in 1st megabyte, etc)
  19945.  35h    WORD    ??? bit flags
  19946.  37h  4 BYTEs    ???
  19947.  3Bh    WORD    segment of first MCB in high memory chain???
  19948.  3Dh    WORD    flags
  19949.         bit 2: no DPMI services
  19950.         bit 11: don't backfill holes in video memory area
  19951.         bit 12: don't backfill below video memory???
  19952.  3Fh    WORD    flags
  19953.         bit 7: ???
  19954.  41h    WORD    flags
  19955.         bit 0: Windows3 support enabled
  19956.         bit 8: ???
  19957.  43h  2 BYTEs    ???
  19958.  45h    WORD    amount of memory to report available on INT 15/AH=88h
  19959.  47h  4 BYTEs    ???
  19960.  4Bh    WORD    ???
  19961.  4Dh  2 BYTEs    ???
  19962.  4Fh    WORD    ???
  19963.  51h    WORD    bit flags
  19964.         bit 12: ???
  19965.  53h    DWORD    old INT 21h
  19966.  57h    DWORD    pointer to 386MAX's EMS (INT 67h) handler
  19967.  
  19968. Format of high memory info record:
  19969. Offset    Size    Description
  19970.  00h    WORD    segment address of memory region
  19971.  02h    WORD    size of memory region in paragraphs
  19972.  04h    BYTE    type or flags???
  19973.         00h if locked out
  19974.         02h if EMS page frame
  19975.         04h if high RAM
  19976.         42h if ROM
  19977.  05h    BYTE    ???
  19978.  
  19979. Format of ROM shadowing record:
  19980. Offset    Size    Description
  19981.  00h    WORD    segment of ROM???
  19982.  02h    WORD    segment of ROM???
  19983.  04h  2 BYTEs    ???
  19984.  06h    WORD    size of shadowed ROM in paragraphs
  19985.  08h  4 BYTEs    ???
  19986.  
  19987. Values for memory type:
  19988.  00h unused by EMS
  19989.  01h DOS
  19990.  04h page frame overlapping ROM???
  19991.  80h high memory
  19992.  84h page frame???
  19993.  87h video ROM???
  19994. Note:    the type may be 00h (unused) if the 16K page is split among different
  19995.       uses (such as ROM and high RAM)
  19996.  
  19997. Call 386MAX API (via OUT DX,AL) with:
  19998.     STACK: WORD value for DX
  19999.     AH = 01h get high memory information
  20000.         ES:DI -> buffer for array of high memory info records
  20001.             (see above)
  20002.         Return: CX = number of records placed in buffer
  20003.     AH = 02h get shadowed ROM info???
  20004.         ES:DI -> buffer for array of ROM shadowing records (see above)
  20005.         Return: CX = number of records placed in buffer
  20006.     AH = 03h get 386MAX state
  20007.         ES:DI -> 90-byte buffer for state (see above)
  20008.         Return: AH = 00h (successful)
  20009.             buffer filled
  20010.         Note:    unlike INT 21/AX=4402h"386MAX", this function omits
  20011.               the first byte specifying the state buffer version
  20012.     AH = 04h get memory types???
  20013.         ES:DI -> buffer for memory type info (array of bytes, one per
  20014.             16K page) (see above)
  20015.         Return:    CX = number of bytes placed in buffer
  20016.     AH = 05h get ???
  20017.         AL = subfunction
  20018.             00h invoke INT 15/AX=2401h first
  20019.             01h don't invoke INT 15/AX=2401h first
  20020.         CX = number of bytes to copy (0000h for default)
  20021.         SI = ???
  20022.         ES:DI -> buffer for ???
  20023.         Return: CX = number of bytes actually copied
  20024.             ???
  20025.     AH = 06h get memory speed info
  20026.         ES:DI -> buffer for memory speed records (see below)
  20027.         Return: AH = 00h (successful)
  20028.             CX = number of bytes placed in buffer
  20029.         Note:    this function can take over a second to execute
  20030.     AH = 07h ???
  20031.         ???
  20032.         Return:    ???
  20033.     AH = 08h ???
  20034.         AL = ??? (00h or nonzero)
  20035.     AH = 09h toggle ??? flags
  20036.         BX = bitmask of bits of ??? flags (word at state+11h) to toggle
  20037.         Return: AH = 00h (successful)
  20038.         Note: invokes INT 15/AX=2401h first
  20039.     AH = 0Ah toggle ??? flags
  20040.         BX = bitmask of bits of ??? (word at state+33h) to toggle
  20041.         Return: AH = 00h (successful)
  20042.         Notes:    invokes INT 15/AX=2401h first
  20043.             does ??? if bit 3 on after specified bits are toggled
  20044.     AH = 0Bh toggle ??? flags
  20045.         BX = bitmask of bits of ??? (word at state+35h) to toggle
  20046.         Return: AH = 00h (successful)
  20047.         Note: invokes INT 15/AX=2401h first
  20048.     AH = 0Ch toggle ??? flags
  20049.         BX = bitmask of bits of ??? (word at state+41h) to toggle
  20050.         Return: AH = 00h (successful)
  20051.         Note: invokes INT 15/AX=2401h first
  20052.     AH = 0Dh specify 386MAX high-memory location
  20053.         BX = segment address of high-memory real-mode portion of 386MAX
  20054.         ???
  20055.         Return: AH = status (00h successful)
  20056.             ???
  20057.     AH = 0Eh CRT controller register virtualization
  20058.         AL = subfunction
  20059.             00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h
  20060.             01h trap accesses to CRTC I/O ports
  20061.     AH = 0Fh reboot system
  20062.         Return: never
  20063.     AH = 11h get high memory information
  20064.         ES:DI -> 96-byte buffer for high memory info
  20065.         Return: AH = 00h (successful)
  20066.             ES:DI buffer filled
  20067.         Notes:    each byte in buffer contains bit flags for a 4K page in
  20068.               the A000h-FFFFh region
  20069.                 bit 0: ???
  20070.                 bit 1: physical address same as linear address
  20071.                 bit 2: EMS page frame
  20072.                 bit 6: ???
  20073.             this function can take over a second to execute
  20074.     AH = 12h ???
  20075.         AL = subfunction
  20076.             00h ???
  20077.             01h ???
  20078.         ???
  20079.         Return: AH = 00h (successful) if AL=00h or 01h
  20080.             AH = 8Fh otherwise
  20081.     AH = 13h page protection???
  20082.         AL = subfunction
  20083.             00h set all ??? 4K pages to read-only???
  20084.             01h set all ??? 4K pages to read-write???
  20085.         ???
  20086.         Return: AH = 00h (successful) if AL=00h or 01h
  20087.             AH = 8Fh otherwise
  20088.     AH = 15h ???
  20089.         ???
  20090.         Return: ???
  20091.     AH = 16h get 386MAX memory usage screen
  20092.         ES:DI -> buffer for memory info display
  20093.         CX = size of buffer in bytes
  20094.         Return:    ES:DI buffer filled with '$'-terminated string (if
  20095.                 large enough to hold entire usage screen)
  20096.     AH = 17h Windows 3 startup/termination
  20097.         AL = subfunction
  20098.             00h Windows3 initializing
  20099.             DX (on stack) = Windows startup flags
  20100.             DI = Windows version number (major in upper byte)
  20101.             ES:BX = 0000h:0000h
  20102.             DS:SI = 0000h:0000h
  20103.             Return: CX = 0000h if OK for Windows to load
  20104.                    <> 0 if Windows should not load
  20105.                 ES:BX -> startup info structure
  20106.                 DS:SI -> Virtual86 mode enable/disable callback
  20107.             01h Windows3 terminating
  20108.             ES:BX -> ???
  20109.             DX (on stack) = Windows exit flags
  20110.             Return: ???
  20111.     AH = 18h QPMS (Qualitas Protected Memory Services)
  20112.         AL = subfunction
  20113.             00h get QPMS configuration
  20114.             Return: BX = starting segment of QPMS memory window
  20115.                 CX = number of 4K pages reserved for QPMS???
  20116.                 DX = number of 4K pages in QPMS window???
  20117.             01h map QPMS memory page???
  20118.             BX = 4K page number within memory reserved for QPMS???
  20119.             CL = 4K page number within QPMS memory window???
  20120.             02h mark all QPMS memory read-only
  20121.             03h mark all QPMS memory read-write
  20122.         Return: AH = status (00h,8Ah,8Bh,8Fh)
  20123.     AH = 19h get linear address for physical address
  20124.         EDX = physical address (low word on stack)
  20125.         Return: AH = status
  20126.                 00h successful
  20127.                 EDX = linear address at which physical address
  20128.                     may be accessed
  20129.                 8Bh physical address currently not addressable
  20130.         Note: calls INT 15/AX=2401h first
  20131.     AH = 1Ah set page table entry???
  20132.         EDX = new page table entry??? (low word on stack)
  20133.         ESI = linear address of page???
  20134.         Return: AH = status (00h,8Bh)
  20135.         Note: calls INT 15/AX=2401h first
  20136.     AH = 1Bh get ???
  20137.         Return: AH = status
  20138.             BX = ???
  20139.             CX = ???
  20140.             EDX = physical address of ???
  20141.     AH = 1Ch get original interrupt vector
  20142.         AL = interrupt vector (00h-7Fh)
  20143.         Return: AH = 00h (successful)
  20144.             EDX = original vector before 386MAX loaded (segment in
  20145.                 high word, offset in low word)
  20146.         Note:    no range checking is performed; requests for INTs 80h-
  20147.               FFh will return random values
  20148.     AH = 1Dh display string???
  20149.         SI = ???
  20150.         Return: AH = 00h (successful)
  20151.             ???
  20152.     AH = 1Eh ???
  20153.         ES:DI -> ???
  20154.         ???
  20155.         Return: ???
  20156.     AH = 1Fh ???
  20157.         ???
  20158.         Return: AX = 0000h if successful
  20159.             BX = ??? (0001h for 386MAX v6.01)
  20160.             CL = ???
  20161.             DL = ??? (5Ah for 386MAX v6.01)
  20162.             DH = ??? (00h for 386MAX v6.01)
  20163.             SI = ???
  20164.             ES???:DI -> ???
  20165.     AH = 40h-5Dh EMS services (see INT 67/AH=40h etc)
  20166.     AH = DEh VCPI services (see INT 67/AX=DE00h etc)
  20167. Return: AH = status (as for EMS INT 67 calls)
  20168.         00h successful
  20169.         80h internal error
  20170.         81h hardware malfunction
  20171.         83h invalid handle
  20172.         84h    undefined function
  20173.         8Ah invalid logical page nuber
  20174.         8Bh illegal physical page number
  20175.         8Fh undefined subfunction
  20176.         A4h access denied
  20177.         etc.
  20178.     STACK popped (value placed in DX if no specific return value for DX)
  20179.  
  20180. Format of memory speed record:
  20181. Offset    Size    Description
  20182.  00h    DWORD    page table entry for 4K page
  20183.  04h    WORD    number of microticks (840ns units) required for REP LODSD of
  20184.         entire 4K page
  20185. ----------214402-----------------------------
  20186. INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
  20187.     AX = 4402h
  20188.     BX = file handle for device "PGS1600$"
  20189.     CX = 0018h (size of buffer)
  20190.     DS:DX -> configuration buffer (see below)
  20191. Return: CF clear if successful
  20192.         buffer filled
  20193.         AX = number of bytes actually copied
  20194.     CF set on error
  20195.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20196. Note:    PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  20197.       display adapter, which provides a 1600x1200 monochrome display as
  20198.       well as one of two emulations, MDA or CGA.
  20199. SeeAlso: AX=4403h"PGS1600"
  20200.  
  20201. Format of configuration information:
  20202. Offset    Size    Description
  20203.  00h    WORD    version (high byte = major, low byte = minor)
  20204.  02h    WORD    board initialisation mode
  20205.  04h    WORD    board I/O address
  20206.         03D0h CGA emulation
  20207.         03B0h MDA emulation
  20208.         0390h no emulation
  20209.         0350h no emulation, alternate
  20210.  06h    WORD    emulation buffer segment
  20211.         B800h    CGA emulation
  20212.         B000h    MDA emulation
  20213.         0000h    no emulation
  20214.  08h    WORD    PG1600 graphics buffer segment
  20215.  0Ah    WORD    number of bytes between consecutive graphic rows
  20216.  0Ch    WORD    horizontal pixel size
  20217.  0Eh    WORD    vertical pixel size
  20218.  10h    WORD    horizontal dots per inch
  20219.  12h    WORD    vertical dots per inch
  20220.  14h    WORD    graphics buffer bits per pixel
  20221.  16h    WORD    monitor bits per pixel
  20222. ----------214402-----------------------------
  20223. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  20224.     AX = 4402h
  20225.     BX = file handle referencing device "$IPCUST"
  20226.     CX, DS:DX ignored
  20227. Return: CF clear if successful
  20228.         AX destroyed
  20229.     CF set on error
  20230.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20231. Note:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  20232.       version 2.05.     If less than the entire data is read or written,
  20233.       the next read/write continues where the previous one ended; this
  20234.       call and AX=4403h both reset the location at which the next
  20235.       operation starts to zero
  20236. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST"
  20237. ----------214402-----------------------------
  20238. INT 21 - 10NET v5.0 - 10BEUI.DOS - API
  20239.     AX = 4402h
  20240.     BX = file handle referencing device "10BEUI$"
  20241.     DS:DX -> parameter record (see below)
  20242.     CX ignored
  20243. Return: CF clear if successful
  20244.         AX destroyed
  20245.     CF set on error
  20246.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20247. SeeAlso: AX=4402h"10MEMMGR",INT 6F/AH=00h"10NET"
  20248.  
  20249. Format of parameter record:
  20250. Offset    Size    Description
  20251.  00h    WORD    000Ah (function number???)
  20252.  02h    WORD    ???
  20253.  04h    DWORD    pointer to buffer for ???
  20254.  08h  4 BYTEs    ???
  20255.  0Ch    WORD    transfer size
  20256. ----------214402-----------------------------
  20257. INT 21 - 10NET v5.0 - 10MEMMGR.SYS - API
  20258.     AX = 4402h
  20259.     BX = file handle referencing device "MEMMGR0$"
  20260.     DS:DX -> 6-byte buffer for interface info (see below)
  20261.     CX ignored
  20262. Return: CF clear if successful
  20263.         AX destroyed
  20264.     CF set on error
  20265.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20266. SeeAlso: AX=4402h"10BEUI",INT 6F/AH=00h"10NET"
  20267.  
  20268. Format of interface info:
  20269. Offset    Size    Description
  20270.  00h    DWORD    address of entry point (see below)
  20271.  04h    WORD    version (0500h for v5.00)
  20272.  
  20273. Call entry point with:
  20274.     AL = 01h ???
  20275.         BX = ???
  20276.         Return: CF clear if successful
  20277.             CF set on error
  20278.             AX = error code
  20279.     AL = 02h ???
  20280.         ???
  20281.     AL = 03h ???
  20282.         ???
  20283.     AL = 04h set/restore memory allocation strategy
  20284.         BX = subfunction
  20285.         0000h set strategy
  20286.         0001h restore strategy
  20287.         Return: CF clear if successful
  20288.             CF set on error (if function disabled)
  20289.             various registers destroyed
  20290.     AL = other
  20291.         Return: CF set
  20292.             AX = 0000h
  20293.             BL = 01h
  20294. ----------214403-----------------------------
  20295. INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
  20296.     AX = 4403h
  20297.     BX = file handle referencing character device
  20298.     CX = number of bytes to write
  20299.     DS:DX -> data to write
  20300. Return: CF clear if successful
  20301.         AX = number of bytes actually written
  20302.     CF set on error
  20303.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20304. Notes:    format of data is driver-specific (see below for some specific cases)
  20305.     if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
  20306.       KEYSTACK.SYS driver will push the specified characters on the
  20307.       keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
  20308.       driver will push the characters onto the keyboard stack
  20309. SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh
  20310. SeeAlso: INT 2F/AX=D44Fh
  20311. ----------214403-----------------------------
  20312. INT 21 - SMARTDRV.SYS - IOCTL - CACHE CONTROL
  20313.     AX = 4403h
  20314.     BX = handle for device "SMARTAAR"
  20315.     CX = number of bytes to write
  20316.     DS:DX -> SMARTDRV control block (see below)
  20317. Return: CF clear if successful
  20318.         AX = number of bytes actually written
  20319.            = 0000h if control block too small for given command
  20320.     CF set on error
  20321.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20322. SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h
  20323.  
  20324. Format of SMARTDRV control block:
  20325. Offset    Size    Description
  20326.  00h    BYTE    function code
  20327.         00h flush cache
  20328.         01h flush and discard cache
  20329.         02h disable caching (flushes and discards cache first)
  20330.         03h enable caching
  20331.         04h control write caching
  20332.         05h set flushing tick count
  20333.         06h lock cache contents
  20334.         07h unlock cache contents
  20335.         08h set flush-on-reboot flag
  20336.         09h unused
  20337.         0Ah control full-track caching
  20338.         0Bh reduce cache size
  20339.         0Ch increase cache size
  20340.         0Dh set INT 13 chain address
  20341. ---function 04h---
  20342.  01h    BYTE    write caching control action
  20343.         00h turn off write-through
  20344.         01h turn on write-through
  20345.         02h turn off write buffering (also flushes cache)
  20346.         03h turn on write buffering (also flushes cache)
  20347. ---function 05h---
  20348.  01h    WORD    number of timer ticks between cache flushes
  20349. ---function 08h---
  20350.  01h    BYTE    new flush-on-reboot flag (00h off, 01h on)
  20351. ---function 0Ah---
  20352.  01h    BYTE    full-track writes are
  20353.         00h not cached
  20354.         01h cached
  20355. ---functions 0Bh,0Ch---
  20356.  01h    WORD    number of 16K pages by which to increase/reduce cache size
  20357. ---function 0Dh---
  20358.  01h    DWORD    new address to which to chain on INT 13
  20359. Note:    the previous address is not preserved
  20360. ----------214403-----------------------------
  20361. INT 21 - CD-ROM device driver - IOCTL OUTPUT
  20362.     AX = 4403h
  20363.     BX = file handle referencing character device for CD-ROM driver
  20364.     CX = number of bytes to write
  20365.     DS:DX -> control block (see below)
  20366. Return: CF clear if successful
  20367.         AX = number of bytes actually written
  20368.     CF set on error
  20369.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20370. SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
  20371.  
  20372. Format of control block:
  20373. Offset    Size    Description
  20374.  00h    BYTE    function code
  20375.         00h eject disk
  20376.         01h lock/unlock door
  20377.         02h reset drive
  20378.         03h control audio channel
  20379.         04h write device control string
  20380.         05h close tray
  20381. ---functions 00h,02h,05h---
  20382.  no further fields
  20383. ---function 01h---
  20384.  01h    BYTE    lock function
  20385.         00h unlock door
  20386.         01h lock door
  20387. ---function 03h---
  20388.  01h    BYTE    input channel (0-3) for output channel 0
  20389.  02h    BYTE    volume for output channel 0
  20390.  03h    BYTE    input channel (0-3) for output channel 1
  20391.  04h    BYTE    volume for output channel 1
  20392.  05h    BYTE    input channel (0-3) for output channel 2
  20393.  06h    BYTE    volume for output channel 2
  20394.  07h    BYTE    input channel (0-3) for output channel 3
  20395.  08h    BYTE    volume for output channel 3
  20396. Note:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  20397.       right prime; a volume of 00h is off
  20398. ---function 04h---
  20399.  01h  N BYTEs    bytes to send directly to the CD-ROM drive without
  20400.         interpretation
  20401. ----------214403-----------------------------
  20402. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  20403.     AX = 4403h
  20404.     BX = handle for device "SCSITAPE"
  20405.     CX = number of bytes to write
  20406.     DS:DX -> SCSITAPE control block (see below)
  20407. Return: CF clear if successful
  20408.         AX = number of bytes actually written
  20409.     CF set on error
  20410.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20411. SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
  20412.  
  20413. Format of SCSITAPE control block:
  20414. Offset    Size    Description
  20415.  00h    WORD    command type
  20416.         'F' Format (argument 1 = interleave, argument 2 = format type)
  20417.         'E' Erase
  20418.         'R' Rewind
  20419.         'L' Load
  20420.         'N' No Load
  20421.         'S' Space (argument 1 = count, argument 2 = type)
  20422.         'M' File Mark (argument 1 = count)
  20423.         'A' Reassign 
  20424.  02h    WORD    argument 1
  20425.  04h    WORD    argument 2
  20426.  06h    WORD    segment of command buffer
  20427.  08h    WORD    offset of command buffer
  20428.  0Ah    WORD    length of command buffer
  20429. ----------214403-----------------------------
  20430. INT 21 U - AI Architects - OS/x86??? - API
  20431.     AX = 4403h
  20432.     BX = handle for device "AIA_OS"
  20433.     CX = number of bytes to write (ignored)
  20434.     DS:DX -> 12-byte buffer, first byte is command:
  20435.             81h installation check
  20436.             82h get API entry point
  20437.             84h uninstall
  20438. Return: CF clear if successful
  20439.         AX = number of bytes actually written
  20440.     CF set on error
  20441.         AX = error code (01h,05h,06h,0Ch,0Dh) (see AH=59h)
  20442. Notes:    these functions are only available if the DOS extender was loaded as a
  20443.       device driver in CONFIG.SYS
  20444.     called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86)
  20445. SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h
  20446.  
  20447. Format of buffer on return:
  20448. Offset    Size    Description
  20449.  00h  4 BYTEs    signature "IABH"
  20450. ---if func 81h---
  20451.  (no additional fields)
  20452. ---if func 82h---
  20453.  04h    DWORD    pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h)
  20454. ---if func 84h---
  20455.  04h    WORD    success indicator
  20456.  06h    WORD    segment of ???
  20457.  08h    WORD    segment of ??? memory block to free if nonzero
  20458.  0Ah    WORD    segment of ??? memory block to free if nonzero
  20459. ----------214403-----------------------------
  20460. INT 21 U - Qualitas 386MAX v6.01 - SET STATE
  20461.     AX = 4403h
  20462.     BX = handle for device "386MAX$$"
  20463.     CX = number of bytes to copy (up to 5Ah)
  20464.     DS:DX -> 386MAX state buffer (see AX=4402h"386MAX")
  20465. Return: CF clear if successful
  20466.         AX = number of bytes actually written
  20467.     CF set on error
  20468.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20469. Note:    the first byte of the buffer must be either 01h, 02h, or 03h
  20470.       (specifying the version of the state record) and the buffer must
  20471.       contain CX bytes AFTER the initial byte
  20472. SeeAlso: AX=4402h"386MAX"
  20473. ----------214403-----------------------------
  20474. INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION???
  20475.     AX = 4403h
  20476.     BX = file handle for device "PGS1600$"
  20477.     CX = 0018h (size of buffer)
  20478.     DS:DX -> configuration buffer (see AX=4402h"PGS1600")
  20479. Return: CF clear if successful
  20480.         AX = number of bytes actually written
  20481.     CF set on error
  20482.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20483. Note:    PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  20484.       display adapter, which provides a 1600x1200 monochrome display as
  20485.       well as one of two emulations, MDA or CGA.
  20486. SeeAlso: AX=4402h"PGS1600"
  20487. ----------214403-----------------------------
  20488. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  20489.     AX = 4403h
  20490.     BX = file handle referencing device "$IPCUST"
  20491.     CX, DS:DX ignored
  20492. Return: CF clear if successful
  20493.         AX destroyed
  20494.     CF set on error
  20495.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20496. Note:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  20497.       version 2.05.     If less than the entire data is read or written,
  20498.       the next read/write continues where the previous one ended; this
  20499.       call and AX=4402h both reset the location at which the next
  20500.       operation starts to zero
  20501. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST"
  20502. ----------214404-----------------------------
  20503. INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
  20504.     AX = 4404h
  20505.     BL = drive number (00h = default, 01h = A:, etc.)
  20506.     CX = number of bytes to read
  20507.     DS:DX -> buffer
  20508. Return: CF clear if successful
  20509.         AX = number of bytes actually read
  20510.     CF set on error
  20511.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20512. Note:    format of data is driver-specific
  20513. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  20514. ----------214404CX0004-----------------------
  20515. INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
  20516.     AX = 4404h
  20517.     CX = 0004h
  20518.     BL = drive number (00h = default, 01h = A:, etc.)
  20519.     DS:DX -> DWORD buffer to receive device driver address
  20520. Note:    In addition to returning the address of the Stacker device driver,
  20521.       this call also sets the volume number at offset 3Eh in the device
  20522.       driver (see INT 25/AX=CDCDh)
  20523. SeeAlso: INT 25/AX=CDCDh
  20524. ----------214404-----------------------------
  20525. INT 21 - Stacker - GET STACVOL FILE SECTORS
  20526.     AX = 4404h
  20527.     BL = drive number (0 is current drive)
  20528.     CX = byte count (i.e., 200h = 1 sector)
  20529.     DS:DX -> buffer (see below)
  20530. Return:    Data Buffer contains the number of sectors requested from the
  20531.       STACVOL physical file for the drive specified.
  20532.  
  20533. Format of stacker buffer:
  20534. Offset    Size    Description
  20535.  00h    WORD    01CDh
  20536.  02h    WORD    sector count
  20537.  04h    DWORD    number of starting sector
  20538.  08h    DWORD    far pointer to Data Buffer
  20539. ----------214404-----------------------------
  20540. INT 21 - DUBLDISK.SYS v2.6 - GET INFO
  20541.     AX = 4404h
  20542.     BL = drive number of DoubleDisk drive (00h = default, 01h = A:, etc.)
  20543.     CX = number of bytes (000Ah-0014h, call ignored otherwise)
  20544.     DS:DX -> data record (see below)
  20545. Return: CF clear if successful
  20546.         AX = number of bytes read
  20547.     CF set on error
  20548.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20549. Program: DUBLDISK.SYS is the device driver portion of DoubleDisk, a disk
  20550.       expander by Vertisoft Systems, Inc.
  20551. Note:    the installation check consists of scanning memory for the signature
  20552.       "FAT 2.6  byte:", which is immediately followed by a data table
  20553. SeeAlso: AX=440Dh
  20554.  
  20555. Format of data record:
  20556. Offset    Size    Description
  20557.  00h    WORD    (call) signature 4444h
  20558.  02h    BYTE    (call) function
  20559.             00h ???
  20560.             01h ???
  20561. ---function 00h---
  20562.  02h    BYTE    (return) ???
  20563.  03h    BYTE    (return) ???
  20564. ---function 01h---
  20565.  02h    WORD    (return) 4444h
  20566.  04h    WORD    allocation unit size???
  20567.  06h    WORD    ???
  20568.  08h    WORD    ???
  20569.  0Ah    BYTE    ???
  20570.  
  20571. Format of signature data table:
  20572. Offset    Size    Description
  20573.  00h  5 BYTEs    ???
  20574.  05h    BYTE    first drive number
  20575.  06h    BYTE    number of drives
  20576.  07h    ???
  20577. ----------214405-----------------------------
  20578. INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
  20579.     AX = 4405h
  20580.     BL = drive number (00h = default, 01h = A:, etc)
  20581.     CX = number of bytes to write
  20582.     DS:DX -> data to write
  20583. Return: CF clear if successful
  20584.         AX = number of bytes actually written
  20585.     CF set on error
  20586.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20587. Note:    format of data is driver-specific
  20588. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  20589. ----------214405-----------------------------
  20590. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  20591.     AX = 4405h
  20592.     BX = drive number (00h = default, 01h = A:, etc)
  20593.     CX = number of bytes to write
  20594.     DS:DX -> SCSIDISK control block (see AX=4403h"ST-01")
  20595. Return: CF clear if successful
  20596.         AX = number of bytes actually written
  20597.     CF set on error
  20598.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20599. SeeAlso: AX=4403h"ST-01"
  20600. ----------214406-----------------------------
  20601. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  20602.     AX = 4406h
  20603.     BX = file handle
  20604. Return: CF clear if successful
  20605.         AL = input status
  20606.         00h not ready (device) or at EOF (file)
  20607.         FFh ready
  20608.     CF set on error
  20609.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20610. Note:    files may not register as being at EOF if positioned there by AH=42h
  20611. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  20612. ----------214407-----------------------------
  20613. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  20614.     AX = 4407h
  20615.     BX = file handle
  20616. Return: CF clear if successful
  20617.         AL = input status
  20618.         00h not ready
  20619.         FFh ready
  20620.     CF set on error
  20621.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  20622. Note:    for DOS 2+, files are always ready for output, even if the disk is
  20623.       full or no media is in the drive
  20624. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  20625. ----------214408-----------------------------
  20626. INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
  20627.     AX = 4408h
  20628.     BL = drive number (00h = default, 01h = A:, etc)
  20629. Return: CF clear if successful
  20630.         AX = 0000h if removable
  20631.            = 0001h if fixed
  20632.     CF set on error
  20633.         AX = error code (01h,0Fh) (see AH=59h)
  20634. SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh
  20635. ----------214409-----------------------------
  20636. INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
  20637.     AX = 4409h
  20638.     BL = drive number (00h = default, 01h = A:, etc)
  20639. Return: CF clear if successful
  20640.         DX = device attribute word
  20641.         bit 15: drive is SUBSTituted
  20642.         bit 12: drive is remote
  20643.         bit  9: direct I/O not allowed
  20644.     CF set on error
  20645.         AX = error code (01h,0Fh) (see AH=59h)
  20646. Note:    on local drives, DX bits not listed above are the attribute word from
  20647.       the device driver header (see AH=52h); for remote drives, the other
  20648.       bits appear to be undefined
  20649. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  20650. ----------21440A-----------------------------
  20651. INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
  20652.     AX = 440Ah
  20653.     BX = handle
  20654. Return: CF clear if successful
  20655.         DX = attribute word (as stored in SFT)
  20656.         bit 15: set if remote
  20657.         bit 14: date/time not set on close
  20658.     CF set on error
  20659.         AX = error code (01h,06h) (see AH=59h)
  20660. Note:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  20661.       the file server on which the handle is located in CX
  20662. SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
  20663. ----------21440B-----------------------------
  20664. INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
  20665.     AX = 440Bh
  20666.     CX = pause between retries (default 1)
  20667.     DX = number of retries (default 3)
  20668. Return: CF clear if successful
  20669.     CF set on error
  20670.         AX = error code (01h) (see AH=59h)
  20671. Notes:    delay is dependent on processor speed (value in CX specifies number of
  20672.       64K-iteration empty loops to execute)
  20673.     if DX=0000h on entry, the retry count is left unchanged
  20674. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  20675. ----------21440C-----------------------------
  20676. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  20677.     AX = 440Ch
  20678.     BX = device handle
  20679.     CH = category code
  20680.         00h unknown (DOS 3.3+)
  20681.         01h COMn: (DOS 3.3+)
  20682.         03h CON (DOS 3.3+)
  20683.         05h LPTn:
  20684.         9Eh Media Access Control driver (STARLITE)
  20685.         00h-7Fh reserved for Microsoft
  20686.         80h-FFh reserved for OEM/user-defined
  20687.     CL = function
  20688.         00h MAC driver Bind (STARLITE)
  20689.         45h set iteration count
  20690.         4Ah select code page
  20691.         4Ch start code-page preparation
  20692.         4Dh end code-page preparation
  20693.         5Fh set display information (DOS 4.0)
  20694.         65h get iteration count
  20695.         6Ah query selected code page
  20696.         6Bh query prepare list
  20697.         7Fh get display information (DOS 4.0)
  20698.     DS:DX -> (DOS) parameter block (see below)
  20699.     SI = parameter to pass to driver (European MSDOS 4.0, OS/2 comp box)
  20700.     DI = parameter to pass to driver (European MSDOS 4.0, OS/2 comp box)
  20701. Return: CF set on error
  20702.         AX = error code (see AH=59h)
  20703.     CF clear if successful
  20704.         DS:DX -> iteration count if CL=65h
  20705.         SI = returned value (European MSDOS 4.0, OS/2 comp box)
  20706.         DI = returned value (European MSDOS 4.0, OS/2 comp box)
  20707.     DS:DX -> (OS/2 comp box) data block
  20708. Note:    bit assignments for function code in CL:
  20709.         bit 7: set to ignore if unsupported, clear to return error
  20710.         bit 6: set if passed to driver, clear if intercepted by DOS
  20711.         bit 5: set if queries data from device, clear if sends command
  20712.         bits 4-0: subfunction
  20713. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=1A01h
  20714.  
  20715. Format of parameter block for function 00h:
  20716. Offset    Size    Description
  20717.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  20718.  08h    WORD    version
  20719.  0Ah    WORD    flags
  20720.         bit 0: media requires connect or listen request before use
  20721.         bit 1: network is a LAN (broadcast/multicast supported)
  20722.         bit 2: point-to-point network
  20723.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  20724.         by MAC driver)
  20725.  0Eh    WORD    context
  20726.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  20727.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  20728.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  20729.  16h    WORD    addressing format (filled in by MAC driver)
  20730.         0000h general addressing
  20731.         0001h Ethernet addressing
  20732.         0002h Token Ring addressing
  20733.         0003h Token Bus addressing
  20734.  18h    DWORD    Send entry point (filled in by MAC driver)
  20735.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  20736.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  20737.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  20738.  
  20739. Format of parameter block for function 45h:
  20740. Offset    Size    Description
  20741.  00h    WORD    number of times output is attempted before driver assumes
  20742.         device is busy
  20743.  
  20744. Format of parameter block for functions 4Ah and 6Ah:
  20745. Offset    Size    Description
  20746.  00h    WORD    length of data
  20747.  02h    WORD    code page ID
  20748.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  20749.           start/end for each of N ranges (DOS 4.0)
  20750.     WORD    0000h  end of data (DOS 4.0)
  20751.  
  20752. Format of parameter block for function 4Dh:
  20753. Offset    Size    Description
  20754.  00h    WORD    length of data
  20755.  02h    WORD    code page ID
  20756.  
  20757. Format of parameter block for function 4Ch:
  20758. Offset    Size    Description
  20759.  00h    WORD    flags
  20760.         DISPLAY.SYS = 0000h
  20761.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  20762.             prepare cartridge selection
  20763.  02h    WORD    length of remainder of parameter block
  20764.  04h    WORD    number of code pages following
  20765.  06h  N WORDs    code page 1,...,N
  20766.  
  20767. Format of parameter block for functions 5Fh and 7Fh:
  20768. Offset    Size    Description
  20769.  00h    BYTE    level (0 for DOS 4.x and 5.0)
  20770.  01h    BYTE    reserved (0)
  20771.  02h    WORD    length of following data (14)
  20772.  04h    WORD    control flags
  20773.           bit 0 set for blink, clear for intensity
  20774.           bits 1 to 15 reserved
  20775.  06h    BYTE    mode type (1=text, 2=graphics)
  20776.  07h    BYTE    reserved (0)
  20777.  08h    WORD    colors
  20778.            0 = monochrome
  20779.            else N bits per pixel
  20780.  0Ah    WORD    pixel columns
  20781.  0Ch    WORD    pixel rows
  20782.  0Eh    WORD    character columns
  20783.  10h    WORD    character rows
  20784.  
  20785. Format of parameter block for function 6Bh:
  20786. Offset    Size    Description
  20787.  00h    WORD    length of following data
  20788.  02h    WORD    number of hardware code pages
  20789.  04h  N WORDs    hardware code pages 1,...,N
  20790.     WORD    number of prepared code pages
  20791.       N WORDs    prepared code pages 1,...,N
  20792. ----------21440C-----------------------------
  20793. INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
  20794.     AX = 440Ch
  20795.     BX = device handle
  20796.     CH = category code
  20797.         07h tape (ASPITAPE.SYS)
  20798.     CL = function
  20799.         01h "mtop" - perform tape operation
  20800.         02h "mtget" - get tape status
  20801.         03h ignore end-of-tape errors
  20802.         04h enable end-of-tape errors
  20803.     DS:DX -> parameter block (see below)
  20804. Return: CF set on error
  20805.         AX = error code (see AH=59h)
  20806.     CF clear if successful
  20807.         DS:DX -> data block
  20808. Notes:    This device driver is a simple DOS interface to the Adaptec Advanced
  20809.       SCSI Programming Interface (ASPI).  It provides the following device
  20810.       names as access to the SCSI tape, 'RMTx' (rewind on close) and
  20811.       'NRMTx' (NO rewind on close) where x can go from 0 to 3.  There may
  20812.       also be the following names 'MTx' and 'NMTx' which default to 1024
  20813.       byte blocks.    The names may also have a '$' appended to try and make
  20814.       them unique from file names of 'RMT0' etc.
  20815.     once opend these devices must be put into RAW mode
  20816. SeeAlso: AX=4402h"ASPI"
  20817.  
  20818. Format of mtop parameter block:
  20819. Offset    Size    Description
  20820.  00h    WORD    operation code
  20821.         00h "MTWEOF" - write an end-of-file record
  20822.         01h "MTFSF" - forward space file
  20823.         02h "MTBSF" - backward space file
  20824.         03h "MTFSR" - forward space record
  20825.         04h "MTBSR" - backward space record
  20826.         05h "MTREW" - rewind
  20827.         06h "MTOFFL" - rewind and unload
  20828.         07h "MTNOP" - perform TEST UNIT READY
  20829.  02h    DWORD    repetition count
  20830.  
  20831. Format of mtget parameter block:
  20832. Offset    Size    Description
  20833.  00h    BYTE    ASPI host ID
  20834.  01h    BYTE    SCSI target ID
  20835.  02h    BYTE    SCSI logical unit number
  20836.  03h    BYTE    device parameters
  20837.         bit 0: drive must use fixed-block read and write
  20838.         bit 7: drive is an ASPI device
  20839.  04h    BYTE    current device state
  20840.         bit 0: device currently opened in buffered mode
  20841.         bit 1: drive currently opened in nonbuffered mode
  20842.         bit 2: rewind drive on last close
  20843.         bit 3: drive has been written on
  20844.         bit 4: drive has been read from
  20845.         bit 5: next read will return 0 bytes
  20846.         bit 6: EOM will resemble EOF
  20847.         bit 7: drive may be busy rewinding
  20848.  05h    BYTE    unit number within driver
  20849.  06h    WORD    fixed block blocksize
  20850.  08h    BYTE    last SCSI status
  20851.  09h    BYTE    last SCSI sense key
  20852.  0Ah    WORD    last SCSI opcode (packed)
  20853.         bits 0-7: SCSI operation (SCSI packet byte 0)
  20854.         bits 8-10: SCSI flags (SCSI packet byte 1)
  20855.         bits 11-12: ASPI "Direction Bits" (ASPI SRB byte 3)
  20856.  0Ch    WORD    residual bytes from SCSI opcode
  20857. ----------21440D-----------------------------
  20858. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  20859.     AX = 440Dh
  20860.     BL = drive number (00h=default,01h=A:,etc)
  20861.     CH = category code
  20862.         08h disk drive
  20863.         00h-7Fh reserved for Microsoft
  20864.         80h-FFh reserved for OEM/user-defined
  20865.     CL = function
  20866.         40h set device parameters
  20867.         41h write logical device track
  20868.         42h format and verify logical device track
  20869.         46h (DOS 4+) set volume serial number (see also AH=69h)
  20870.         47h (DOS 4+) set access flag
  20871.         60h get device parameters
  20872.         61h read logical device track
  20873.         62h verify logical device track
  20874.         66h (DOS 4+) get volume serial number (see also AH=69h)
  20875.         67h (DOS 4+) get access flag
  20876.         68h (DOS 5+) sense media type
  20877.     DS:DX -> (DOS) parameter block (see below)
  20878.     SI:DI -> (OS/2 comp box) parameter block (see below)
  20879. Return: CF set on error
  20880.         AX = error code (01h,02h) (see AH=59h)
  20881.     CF clear if successful
  20882.         DS:DX -> data block if CL=60h or CL=61h
  20883. Notes:    DOS 4.01 seems to ignore the high byte of the number of directory
  20884.       entries in the BPB for diskettes.
  20885.     functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5.0
  20886.     the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h
  20887. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  20888.  
  20889. Format of parameter block for functions 40h, 60h:
  20890. Offset    Size    Description
  20891.  00h    BYTE    special functions
  20892.         bit 0 set if function to use current BPB, clear if Device
  20893.             BIOS Parameter Block field contains new default BPB
  20894.         bit 1 set if function to use track layout fields only
  20895.             must be clear if CL=60h
  20896.         bit 2 set if all sectors in track same size (should be set)
  20897.         bits 3-7 reserved
  20898.  01h    BYTE    device type
  20899.         00h  320K/360K disk
  20900.         01h  1.2M disk
  20901.         02h  720K disk
  20902.         03h  single-density 8-inch disk
  20903.         04h  double-density 8-inch disk
  20904.         05h  fixed disk
  20905.         06h  tape drive
  20906.         07h  (DOS 3.3+) 1.44M floppy
  20907.         08h  read/write optical disk
  20908.         09h  (DOS 5.0) 2.88M floppy
  20909.         0Ah  other type of block device
  20910.  02h    WORD    device attributes
  20911.         bit 0 set if nonremovable medium
  20912.         bit 1 set if door lock ("changeline") supported
  20913.         bits 2-15 reserved
  20914.  04h    WORD    number of cylinders
  20915.  06h    BYTE    media type
  20916.         for 1.2M drive
  20917.             00h 1.2M disk (default)
  20918.             01h 320K/360K disk
  20919.         F8h for DUBLDISK.SYS v2.6 expanded drives
  20920.         always 00h for other drive types
  20921.  07h 31 BYTEs    device BPB (see AH=53h), bytes after BPB offset 1Eh omitted
  20922.  26h    WORD    number of sectors per track (start of track layout field)
  20923.         not used by function 60h
  20924.  28h  N word pairs: number,size of each sector in track
  20925.  
  20926. Format of parameter block for functions 41h, 61h:
  20927. Offset    Size    Description
  20928.  00h    BYTE    special functions (reserved, must be zero)
  20929.  01h    WORD    number of disk head
  20930.  03h    WORD    number of disk cylinder
  20931.  05h    WORD    number of first sector to read/write
  20932.  07h    WORD    number of sectors
  20933.  09h    DWORD    transfer address
  20934.  
  20935. Format of parameter block for functions 42h, 62h:
  20936. Offset    Size    Description
  20937.  00h    BYTE    reserved, must be zero (DOS <3.2)
  20938.           bit 0=0: format/verify track
  20939.             1: format status call (DOS 3.2+)
  20940.           bits 1-7 reserved, must be zero
  20941.         on return (DOS 4.x):
  20942.           bit 0: set if specified tracks, sectors/track supported
  20943.           bit 1: set if function not supported by BIOS
  20944.           bit 2: set if specified tracks, sectors/track not supported
  20945.           bit 3: set if no disk in drive
  20946.  01h    WORD    number of disk head
  20947.  03h    WORD    number of disk cylinder
  20948.  
  20949. Format of parameter block for functions 46h, 66h:
  20950. Offset    Size    Description
  20951.  00h    WORD    (call) info level (should be 0000h)  !!!
  20952.  02h    DWORD    disk serial number (binary)
  20953.  06h 11 BYTEs    volume label or "NO NAME    "
  20954.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  20955.  
  20956. Format of parameter block for functions 47h, 67h:
  20957. Offset    Size    Description
  20958.  00h    BYTE    special-function field (must be zero)
  20959.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  20960.  
  20961. Format of parameter block for function 68h:
  20962. Offset    Size    Description
  20963.  00h    BYTE    01h for default media type, 00h for any other media type
  20964.  01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M
  20965. ----------21440E-----------------------------
  20966. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  20967.     AX = 440Eh
  20968.     BL = drive number (00h=default,01h=A:,etc)
  20969. Return: CF set on error
  20970.         AX = error code (01h,0Fh) (see AH=59h)
  20971.     CF clear if successful
  20972.         AL = 00h block device has only one logical drive assigned
  20973.          1..26 the last letter used to reference the drive (1=A:,etc)
  20974. SeeAlso: AX=440Fh,INT 2F/AX=122Bh
  20975. ----------21440F-----------------------------
  20976. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  20977.     AX = 440Fh
  20978.     BL = physical drive number (00h=default,01h=A:,etc))
  20979. Return: CF set on error
  20980.         AX = error code (01h,0Fh) (see AH=59h)
  20981.     CF clear if successful
  20982.         drive now responds to next logical drive number
  20983. Note:    maps logical drives to physical drives, similar to DOS's treatment of
  20984.       a single physical floppy drive as both A: and B:
  20985. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  20986. ----------214410-----------------------------
  20987. INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
  20988.     AX = 4410h
  20989.     BX = handle for device
  20990.     CH = category code (see AX=440Ch)
  20991.     CL = function code
  20992. Return: CF clear if successful
  20993.         AX = 0000h    specified IOCTL function is supported
  20994.     CF set on error
  20995.         AL = 01h    IOCTL capability not available
  20996. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  20997.       standard DOS 3.2 set may use this call first to see whether a
  20998.       particular call is supported
  20999. SeeAlso: AX=440Ch,AX=440Dh,AX=4411h
  21000. ----------214410BXFFFF-----------------------
  21001. INT 21 U - NewSpace - ENABLE DRIVER
  21002.     AX = 4410h
  21003.     BX = FFFFh
  21004. Notes:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  21005.       all files as they are written and decompresses them as they are read
  21006.     compressed files are not accessible unless the driver is enabled
  21007. SeeAlso: AX=4411h/BX=FFFFh
  21008. ----------214411-----------------------------
  21009. INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
  21010.     AX = 4411h
  21011.     BL = drive number
  21012.     CH = category code (see AX=440Dh)
  21013.     CL = function code
  21014. Return: CF clear if successful
  21015.         AX = 0000h    specified IOCTL function is supported
  21016.     CF set on error
  21017.         AL = 01h    IOCTL capability not available
  21018. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  21019.       standard DOS 3.2 set may use this call first to see whether a
  21020.       particular call is supported
  21021. SeeAlso: AX=440Ch,AX=440Dh,AX=4410h
  21022. ----------214411BXFFFF-----------------------
  21023. INT 21 U - NewSpace - DISABLE DRIVER
  21024.     AX = 4411h
  21025.     BX = FFFFh
  21026. Notes:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  21027.       all files as they are written and decompresses them as they are read
  21028.     compressed files are not accessible unless the driver is enabled
  21029. SeeAlso: AX=4410h/BX=FFFFh
  21030. ----------214412-----------------------------
  21031. INT 21 - DR-DOS 5+ - DETERMINE DOS TYPE
  21032.     AX = 4412h
  21033.     CF set
  21034. Return: CF set if not DR-DOS
  21035.         AX = error code (see AH=59h)
  21036.     CF clear if DR-DOS
  21037.         DX = AX = version code
  21038.         1060h = ???
  21039.         1063h = DR-DOS 3.41 ???
  21040.         1065h = DR-DOS 5.0
  21041.         1067h = DR-DOS 6.0
  21042. Note:    this call is identical to AX=4452h
  21043. SeeAlso: AX=4452h
  21044. ----------214412BXFFFF-----------------------
  21045. INT 21 U - NewSpace - INSTALLATION CHECK???
  21046.     AX = 4412h
  21047.     BX = FFFFh
  21048. Return: AX = PSP segment of NewRes (resident driver for NewSpace)
  21049.     BX:DX -> ???
  21050.     CX = ???
  21051. SeeAlso: AX=4411h/BX=FFFFh
  21052. ----------214413BXFFFF-----------------------
  21053. INT 21 U - NewSpace - GET ???
  21054.     AX = 4413h
  21055.     BX = FFFFh
  21056. Return: AX = code segment of NewRes (resident driver for NewSpace)
  21057.     BX = offset of ???
  21058. SeeAlso: AX=4412h/BX=FFFFh
  21059. ----------214414-----------------------------
  21060. INT 21 U - DR-DOS 5.0 - SET GLOBAL PASSWORD
  21061.     AX = 4414h
  21062.     DS:DX -> password string (blank-padded to 8 characters)
  21063. Desc:    Specify the master password for accessing files.
  21064. Note:    this call is identical to AX=4454h
  21065. SeeAlso: AX=4454h
  21066. ----------214414BXFFFF-----------------------
  21067. INT 21 U - NewSpace - DEBUGGING DUMP
  21068.     AX = 4414h
  21069.     BX = FFFFh
  21070. Return:    debugging dump written to X:\NEWSPACE.SMP
  21071. SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
  21072. ----------2144-------------------------------
  21073. INT 21 U - DR-DOS 5.0 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL
  21074.     AH = 44h
  21075.     AL = 16h to 18h
  21076. Note:    these subfunctions are identical to AX=4456h to 4458h
  21077. SeeAlso: AX=4456h,AX=4457h,AX=4458h
  21078. ----------214451-----------------------------
  21079. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  21080.     AX = 4451h
  21081. Return: CF set if not Concurrent DOS
  21082.         AX = error code (see AH=59h)
  21083.     CF clear if successful
  21084.         AH = single-tasking/multitasking nature
  21085.         10h single-tasking
  21086.             AL = operating system version ID (see AX=4452h)
  21087.         14h multitasking
  21088.             AL = operating system version ID
  21089.             32h Concurrent PC DOS 3.2
  21090.             41h Concurrent DOS 4.1
  21091.             50h Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1
  21092.             60h Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0
  21093.             62h Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0
  21094.             66h DR Multiuser DOS 5.1
  21095. Notes:    as of Concurrent DOS/XM 5.0 (possibly earlier), the version is stored
  21096.       in the environment variable VER
  21097.     use this function if you are looking for multitasking capabilities,
  21098.       AX=4452h for single-tasking
  21099.     this function should never return the single-tasking values
  21100. SeeAlso: AX=4452h,AX=4459h
  21101. ----------214452-----------------------------
  21102. INT 21 - DR-DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION
  21103.     AX = 4452h
  21104.     CF set
  21105. Return: CF set if not DR-DOS
  21106.         AX = error code (see AH=59h)
  21107.     CF clear if DR-DOS
  21108.         DX = AX = version code
  21109.         AH = single-tasking/multitasking
  21110.         10h single-tasking
  21111.             AL = operating system version ID
  21112.             60h DOS Plus
  21113.             63h DR-DOS 3.41
  21114.             64h DR-DOS 3.42
  21115.             65h DR-DOS 5.00
  21116.             67h DR-DOS 6.00
  21117.         14h multitasking
  21118.             AL = operating system version ID (see AX=4451h)
  21119. Notes:    the DR-DOS version is stored in the environment variable VER
  21120.     use this function if looking for single-tasking capabilities, AX=4451h
  21121.       if looking for multitasking; this call should never return multi-
  21122.       tasking values
  21123. SeeAlso: AX=4412h,AX=4451h,AX=4459h
  21124. ----------214454-----------------------------
  21125. INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD
  21126.     AX = 4454h
  21127.     DS:DX -> password string (blank-padded to 8 characters)
  21128. Desc:    Specify the master password for accessing files.
  21129. SeeAlso: AX=4303h,AX=4414h
  21130. ----------214456-----------------------------
  21131. INT 21 U - DR-DOS 5.0+ - HISTORY BUFFER CONTROL
  21132.     AX = 4456h
  21133.     DL = flag
  21134.         bit 0: 1 = command history buffers
  21135.            0 = set to application
  21136. Return: AL = ??? (20h if DL bit 0 set, A0h if clear (DR-DOS 6.0))
  21137. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  21138. ----------214457-----------------------------
  21139. INT 21 U - DR-DOS 5.0+ - SHARE/HILOAD CONTROL
  21140.     AX = 4457h
  21141.     DH = subfunction
  21142.         00h enable/disable SHARE
  21143.         DL = 00h disable
  21144.            = 01h enable
  21145.            else Return: AX = ???
  21146.         01h get HILOAD status
  21147.         Return: AX = status
  21148.                 0000h off
  21149.                 0001h on
  21150.         02h set HILOAD status
  21151.         DL = new state (00h off, 01h on)
  21152.         Return: AX = ???
  21153.         other
  21154.         Return: AX = ???
  21155. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  21156. SeeAlso: AX=4457h/DX=FFFFh
  21157. ----------214457DXFFFF-----------------------
  21158. INT 21 U - DR-DOS 6.0 - GET SHARE STATUS
  21159.     AX = 4457h
  21160.     DX = FFFFh
  21161. Return: AX = SHARE status
  21162. SeeAlso: INT 2F/AX=1000h
  21163. ----------214458-----------------------------
  21164. INT 21 U - DR-DOS 5.0+ internal - GET POINTER TO TABLE OF ???
  21165.     AX = 4458h
  21166. Return: ES:BX -> internal table (see below)
  21167.     AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0)
  21168. SeeAlso: AX=4452h
  21169.  
  21170. Format of internal table:
  21171. Offset    Size    Description
  21172.  00h    DWORD    pointer to ???
  21173.  04h  7 BYTEs    ???
  21174.  0Bh    WORD    K of extended memory at startup
  21175.  0Dh    BYTE    number of far jump entry points
  21176.  0Eh    WORD    segment containing far jumps to DR-DOS entry points (see below)
  21177. ---DR-DOS 6.0---
  21178.  10h    WORD    (only if kernel loaded in HMA) offset in HMA of first free HMA
  21179.         memory block (see below) or 0000h if none; segment is FFFFh
  21180.  12h    WORD    pointer to segment of environment variables set in CONFIG,
  21181.         or 0000h if already used
  21182.  14h    WORD    (only if kernel loaded in HMA) offset in HMA of first used HMA
  21183.         memory block (see below) or 0000h if none; segment is FFFFh
  21184. Note:    the segment used for the DR-DOS 6.0 CONFIG environment variables
  21185.       (excluding COMSPEC, VER and OS) is only useful for programs/drivers
  21186.       called from CONFIG.SYS. The word is set to zero later and the area
  21187.       lost.
  21188.  
  21189. Format of jump table for DR-DOS 5.0-6.0:
  21190. Offset    Size    Description
  21191.  00h  5 BYTEs    far jump to entry point corresponding to CP/M CALL 5
  21192.  05h  5 BYTEs    far jump to entry point corresponding to INT 20
  21193.  0Ah  5 BYTEs    far jump to entry point corresponding to INT 21
  21194.  0Fh  5 BYTEs    far jump to entry point corresponding to ???
  21195.  14h  5 BYTEs    far jump to entry point corresponding to ???
  21196.  19h  5 BYTEs    far jump to entry point corresponding to ???
  21197.  1Eh  5 BYTEs    far jump to entry point corresponding to ???
  21198.  23h  5 BYTEs    far jump to entry point corresponding to ???
  21199.  28h  5 BYTEs    far jump to entry point corresponding to ???
  21200.  2Dh  5 BYTEs    far jump to entry point corresponding to ???
  21201.  32h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  21202.  37h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  21203.  3Ch  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  21204.  41h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  21205.  46h  5 BYTEs    far jump to entry point corresponding to ??? (IRET)
  21206.  4Bh  5 BYTEs    far jump to entry point corresponding to ???
  21207.  
  21208. Format of HMA Memory Block (DR-DOS 6.0 kernel loaded in HMA):
  21209. Offset    Size    Description
  21210.  00h    WORD    offset of next HMA Memory Block (0000h if last block)
  21211.  02h    WORD    size of this block in bytes (at least 10h)
  21212.  04h    BYTE    type of HMA Memory Block (interpreted by MEM)
  21213.         00h system
  21214.         01h KEYB
  21215.         02h NLSFUNC
  21216.         03h SHARE
  21217.         04h TaskMAX
  21218.         05h COMMAND
  21219.  05h    var    TSR (or system) code and data. DR-DOS TSR's, such as KEYB,
  21220.         hooks interrupts using segment FFFEh instead FFFFh.
  21221. ----------214459-----------------------------
  21222. INT 21 - DR MultiUser DOS 5.0 - API
  21223.     AX = 4459h
  21224.     CL = function (see INT E0"CP/M")
  21225.     DS,DX = parameters
  21226. Notes:    DR-DOS 5.0 returns CF set and AX=0001h
  21227.     this API is also available on INT E0
  21228. SeeAlso: AX=4452h,INT E0"CP/M"
  21229. ----------2144FFBXFFFF-----------------------
  21230. INT 21 U - NewSpace - ???
  21231.     AX = 44FFh
  21232.     BX = FFFFh
  21233.     DX = ???
  21234. Note:    NewSpace is a TSR by Isogon Corporation which automatically compresses
  21235.       all files as they are written and decompresses them as they are read
  21236. SeeAlso: AX=4414h/BX=FFFFh
  21237. ----------2145-------------------------------
  21238. INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
  21239.     AH = 45h
  21240.     BX = file handle
  21241. Return: CF clear if successful
  21242.         AX = new handle
  21243.     CF set on error
  21244.         AX = error code (04h,06h) (see AH=59h)
  21245. Notes:    moving file pointer for either handle will also move it for the other,
  21246.       because both will refer to the same system file table
  21247.     for DOS versions prior to 3.3, file writes may be forced to disk by
  21248.       duplicating the file handle and closing the duplicate
  21249. SeeAlso: AH=3Dh,AH=46h
  21250. ----------2146-------------------------------
  21251. INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
  21252.     AH = 46h
  21253.     BX = file handle
  21254.     CX = file handle to become duplicate of first handle
  21255. Return: CF clear if successful
  21256.     CF set on error
  21257.         AX = error code (04h,06h) (see AH=59h)
  21258. Notes:    closes file with handle CX if it is still open
  21259.     DOS 3.30 hangs if BX=CX on entry
  21260.     moving file pointer for either handle will also move it for the other,
  21261.       because both will refer to the same system file table
  21262. SeeAlso: AH=3Dh,AH=45h
  21263. ----------2147-------------------------------
  21264. INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
  21265.     AH = 47h
  21266.     DL = drive number (00h = default, 01h = A:, etc)
  21267.     DS:SI -> 64-byte buffer for ASCIZ pathname
  21268. Return: CF clear if successful
  21269.         AX = 0100h (undocumented)
  21270.     CF set on error
  21271.         AX = error code (0Fh) (see AH=59h)
  21272. Notes:    the returned path does not include a drive or the initial backslash
  21273.     many Microsoft products for Windows rely on AX being 0100h on success
  21274.     under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
  21275. SeeAlso: AH=19h,AH=3Bh,INT 15/AX=DE25h
  21276. ----------2148-------------------------------
  21277. INT 21 - DOS 2+ - ALLOCATE MEMORY
  21278.     AH = 48h
  21279.     BX = number of paragraphs to allocate
  21280. Return: CF clear if successful
  21281.         AX = segment of allocated block
  21282.     CF set on error
  21283.         AX = error code (07h,08h) (see AH=59h)
  21284.         BX = size of largest available block
  21285. Notes:    DOS 2.1-5.0 coalesces free blocks while scanning for a block to
  21286.       allocate
  21287.     .COM programs are initially allocated the largest available memory
  21288.       block, and should free some memory with AH=49h before attempting any
  21289.       allocations
  21290.     under the FlashTek X-32 DOS extender, EBX contains a protected-mode
  21291.       near pointer to the allocated block on a successful return
  21292. SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
  21293. ----------2149-------------------------------
  21294. INT 21 - DOS 2+ - FREE MEMORY
  21295.     AH = 49h
  21296.     ES = segment of block to free
  21297. Return: CF clear if successful
  21298.     CF set on error
  21299.         AX = error code (07h,09h) (see AH=59h)
  21300. Notes:    apparently never returns an error 07h, despite official docs; DOS 3.30
  21301.       code contains only an error 09h exit
  21302.     DOS 2.1-5.0 does not coalesce adjacent free blocks when a block is
  21303.       freed, only when a block is allocated or resized
  21304. SeeAlso: AH=48h,AH=4Ah
  21305. ----------214A-------------------------------
  21306. INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
  21307.     AH = 4Ah
  21308.     BX = new size in paragraphs
  21309.     ES = segment of block to resize
  21310. Return: CF clear if successful
  21311.     CF set on error
  21312.         AX = error code (07h,08h,09h) (see AH=59h)
  21313.         BX = maximum paragraphs available for specified memory block
  21314. Notes:    under DOS 2.1-5.0, if there is insufficient memory to expand the block
  21315.       as much as requested, the block will be made as large as possible
  21316.     DOS 2.1-5.0 coalesces any free blocks immediately following the block
  21317.       to be resized
  21318. SeeAlso: AH=48h,AH=49h,AH=83h
  21319. ----------214B-------------------------------
  21320. INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
  21321.     AH = 4Bh
  21322.     AL = type of load
  21323.         00h load and execute
  21324.         01h load but do not execute
  21325.         03h load overlay
  21326.         04h load and execute in background (European MSDOS 4.0 only)
  21327.         "Exec & Go" (see also AH=80h)
  21328.     DS:DX -> ASCIZ program name (must include extension)
  21329.     ES:BX -> parameter block (see below)
  21330.     CX = mode (subfunction 04h only)
  21331.         0000h child placed in zombie mode after termination
  21332.         0001h child's return code discarded on termination
  21333. Return: CF clear if successful
  21334.         BX,DX destroyed
  21335.         if subfunction 01h, process ID set to new program's PSP; get with
  21336.         INT 21/AH=62h
  21337.     CF set on error
  21338.         AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
  21339. Notes:    DOS 2.x destroys all registers, including SS:SP
  21340.     for functions 00h and 01h, the calling process must ensure that there
  21341.       is enough unallocated memory available; if necessary, by releasing
  21342.       memory with AH=49h or AH=4Ah
  21343.     for function 01h, the AX value to be passed to the child program is put
  21344.       on top of the child's stack
  21345.     for function 03h, DOS assumes that the overlay is being loaded into
  21346.       memory allocated by the caller
  21347.     function 01h was undocumented prior to the release of DOS 5.0
  21348.     some versions (such as DR-DOS 6.0) check the parameters and parameter
  21349.       block and return an error if an invalid value (such as an offset of
  21350.       FFFFh) is found
  21351.     background programs under European MSDOS 4.0 must use the new
  21352.       executable format
  21353.     new executables begin running with the following register values
  21354.         AX = environment segment
  21355.         BX = offset of command tail in environment segment
  21356.         CX = size of automatic data segment (0000h = 64K)
  21357.         ES,BP = 0000h
  21358.         DS = automatic data segment
  21359.         SS:SP = initial stack
  21360.       the command tail corresponds to an old executable's PSP:0081h and
  21361.       following, except that the 0Dh is turned into a NUL (00h); new
  21362.       format executables have no PSP
  21363.     under the FlashTek X-32 DOS extender, only function 00h is supported
  21364.       and the pointers are passed in DS:EDX and ES:EBX
  21365. BUGS:    DOS 2.00 assumes that DS points at the current program's PSP
  21366.     Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
  21367.       file contains additional data after the actual overlay
  21368. SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E
  21369.  
  21370. Format of EXEC parameter block for AL=00h,01h,04h:
  21371. Offset    Size    Description
  21372.  00h    WORD    segment of environment to copy for child process (copy caller's
  21373.         environment if 0000h)
  21374.  02h    DWORD    pointer to command tail to be copied into child's PSP
  21375.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  21376.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  21377.  0Eh    DWORD    (AL=01h) will hold subprogram's initial SS:SP on return
  21378.  12h    DWORD    (AL=01h) will hold entry point (CS:IP) on return
  21379.  
  21380. Format of EXEC parameter block for AL=03h:
  21381. Offset    Size    Description
  21382.  00h    WORD    segment at which to load overlay
  21383.  02h    WORD    relocation factor to apply to overlay if in .EXE format
  21384.  
  21385. Format of EXEC parameter block for FlashTek X-32:
  21386. Offset    Size    Description
  21387.  00h    PWORD    48-bit far pointer to environment string
  21388.  06h    PWORD    48-bit far pointer to command tail string
  21389.  
  21390. Format of .EXE file header:
  21391. Offset    Size    Description
  21392.  00h  2 BYTEs    .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
  21393.  02h    WORD    number of bytes in last 512-byte page of executable
  21394.  04h    WORD    total number of 512-byte pages in executable (includes any
  21395.         partial last page)
  21396.  06h    WORD    number of relocation entries
  21397.  08h    WORD    header size in paragraphs
  21398.  0Ah    WORD    minimum paragraphs of memory to allocation in addition to
  21399.         executable's size
  21400.  0Ch    WORD    maximum paragraphs to allocate in addition to executable's size
  21401.  0Eh    WORD    initial SS relative to start of executable
  21402.  10h    WORD    initial SP
  21403.  12h    WORD    checksum (one's complement of sum of all words in executable)
  21404.  14h    DWORD    initial CS:IP relative to start of executable
  21405.  18h    WORD    offset within header of relocation table (40h for New EXE)
  21406.  1Ah    WORD    overlay number (normally 0000h = main program)
  21407. ---new executable---
  21408.  1Ch  4 BYTEs    ???
  21409.  20h    WORD    behavior bits
  21410.  22h 26    BYTEs    reserved for additional behavior info
  21411.  3Ch    DWORD    offset of new executable header within disk file
  21412. ---Borland TLINK---
  21413.  1Ch  2 BYTEs    ??? (apparently always 01h 00h)
  21414.  1Eh    BYTE    signature FBh
  21415.  1Fh    BYTE    TLINK version (major in high nybble, minor in low nybble)
  21416.  20h  2 BYTEs    ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
  21417. ---ARJ self-extracting archive---
  21418.  1Ch  4 BYTEs    signature "RJSX" (older versions, new signature is "aRJsfX" in
  21419.         the first 1000 bytes of the file)
  21420. ---LZEXE 0.90 compressed executable---
  21421.  1Ch  4 BYTEs    signature "LZ09"
  21422. ---LZEXE 0.91 compressed executable---
  21423.  1Ch  4 BYTEs    signature "LZ91"
  21424. ---PKLITE compressed executable---
  21425.  1Ch    BYTE    minor version number
  21426.  1Dh    BYTE    (low nybble) major version
  21427.         (high nybble) 01h if extra compression
  21428.  1Eh  6 BYTEs    signature "PKLITE" (followed by copyright message)
  21429. ---LHarc 1.x self-extracting archive---
  21430.  1Ch  4 BYTEs    unused???
  21431.  20h  3 BYTEs    jump to start of extraction code
  21432.  23h  2 BYTEs    ???
  21433.  25h 12 BYTEs    signature "LHarc's SFX "
  21434. ---LHA 2.x self-extracting archive---
  21435.  1Ch  8 BYTEs    ???
  21436.  24h 10 BYTEs    signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
  21437. ---TopSpeed C 3.0 CRUNCH compressed file---
  21438.  1Ch    DWORD    018A0001h
  21439.  20h    WORD    1565h
  21440. ---PKARCK 3.5 self-extracting archive---
  21441.  1Ch    DWORD    00020001h
  21442.  20h    WORD    0700h
  21443. ---BSA (Soviet archiver) self-extracting archive---
  21444.  1Ch    WORD    000Fh
  21445.  1Eh    BYTE    A7h
  21446. ---LARC self-extracting archive---
  21447.  1Ch  4 BYTEs    ???
  21448.  20h 11 BYTEs    "SFX by LARC "
  21449. ---LH self-extracting archive---
  21450.  1Ch  8 BYTEs    ???
  21451.  24h  8 BYTEs    "LH's SFX "
  21452. ---other linkers---
  21453.  1Ch    var    optional information
  21454. ---
  21455.   N   N DWORDs    relocation items
  21456. Notes:    if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  21457.       versions of the MS linker set it that way
  21458.     if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
  21459.       program is loaded as high in memory as possible
  21460.     the maximum allocation is set to FFFFh by default
  21461.  
  21462. Format of new executable header:
  21463. Offset    Size    Description
  21464.  00h  2 BYTEs    "NE" (4Eh 45h) signature
  21465.  02h  2 BYTEs    linker version (major, then minor)
  21466.  04h    WORD    offset from start of this header to entry table (see below)
  21467.  06h    WORD    length of entry table in bytes
  21468.  08h    DWORD    file load CRC (0 in Borland's TPW)
  21469.  0Ch    BYTE    program flags
  21470.         bits 0-1 DGROUP type
  21471.           0 = none
  21472.           1 = single shared
  21473.           2 = multiple (unshared)
  21474.           3 = (null)
  21475.         bit 2:    global initialization
  21476.         bit 3:    protected mode only
  21477.         bit 4:    8086 instructions
  21478.         bit 5:    80286 instructions
  21479.         bit 6:    80386 instructions
  21480.         bit 7:    80x87 instructions
  21481.  0Dh    BYTE    application flags
  21482.         bits 0-2: application type
  21483.             001 full screen (not aware of Windows/P.M. API)
  21484.             010 compatible with Windows/P.M. API
  21485.             011 uses Windows/P.M. API
  21486.         bit 3: is a Family Application (OS/2)
  21487.         bit 5: 0=executable, 1=errors in image
  21488.         bit 6: non-conforming program (valid stack is not maintained)
  21489.         bit 7: DLL or driver rather than application
  21490.             (SS:SP info invalid, CS:IP points at FAR init routine 
  21491.              called with AX=module handle which returns AX=0000h
  21492.              on failure, AX nonzero on successful initialization)
  21493.  0Eh    WORD    auto data segment index
  21494.  10h    WORD    initial local heap size
  21495.  12h    WORD    initial stack size (added to data seg, 0000h if SS != DS)
  21496.  14h    DWORD    program entry point (CS:IP), "CS" is index into segment table
  21497.  18h    DWORD    initial stack pointer (SS:SP), "SS" is segment index
  21498.         if SS=automatic data segment and SP=0000h, the stack pointer is
  21499.           set to the top of the automatic data segment, just below the
  21500.           local heap
  21501.  1Ch    WORD    segment count
  21502.  1Eh    WORD    module reference count
  21503.  20h    WORD    length of nonresident names table in bytes
  21504.  22h    WORD    offset from start of this header to segment table (see below)
  21505.  24h    WORD    offset from start of this header to resource table
  21506.  26h    WORD    offset from start of this header to resident names table
  21507.  28h    WORD    offset from start of this header to module reference table
  21508.  2Ah    WORD    offset from start of this header to imported names table
  21509.         (array of counted strings, terminated with a string of length
  21510.          00h)
  21511.  2Ch    DWORD    offset from start of file to nonresident names table
  21512.  30h    WORD    count of moveable entry point listed in entry table
  21513.  32h    WORD    file alignment size shift count
  21514.         0 is equivalent to 9 (default 512-byte pages)
  21515.  34h    WORD    number of resource table entries
  21516.  36h    BYTE    target operating system
  21517.         00h unknown
  21518.         01h OS/2
  21519.         02h Windows
  21520.         03h European MSDOS 4.x
  21521.         04h Windows 386
  21522.         05h BOSS (Borland Operating System Services)
  21523.  37h    BYTE    other EXE flags
  21524.         bit 0: supports long filenames
  21525.         bit 1: 2.X protected mode
  21526.         bit 2: 2.X proportional font
  21527.         bit 3: gangload area
  21528.  38h    WORD    offset to return thunks or start of gangload area
  21529.  3Ah    WORD    offset to segment reference thunks or length of gangload area
  21530.  3Ch    WORD    minimum code swap area size
  21531.  3Eh  2 BYTEs    expected Windows version (minor version first)
  21532.  
  21533. Format of Codeview trailer (at end of executable):
  21534. Offset    Size    Description
  21535.  00h    WORD    signature 4E42h ('NB')
  21536.  02h    WORD    Microsoft debug info version number
  21537.  04h    DWORD    Codeview header offset
  21538.  
  21539. Format of new executable segment table record:
  21540.  00h    WORD    offset in file (shift left by alignment shift to get byte offs)
  21541.  02h    WORD    length of image in file (0000h = 64K)
  21542.  04h    WORD    attributes
  21543.         bit 0: data segment rather than code segment
  21544.         bit 1: unused???
  21545.         bit 2: real mode
  21546.         bit 3: iterated
  21547.         bit 4: movable
  21548.         bit 5: sharable
  21549.         bit 6: preloaded rather than demand-loaded
  21550.         bit 7: execute-only (code) or read-only (data)
  21551.         bit 8: relocations (directly following code for this segment)
  21552.         bit 9: debug info present
  21553.         bits 10,11: 80286 DPL bits
  21554.         bit 12:        discardable
  21555.         bits 13-15: discard priority
  21556.  06h    WORD    number of bytes to allocate for segment (0000h = 64K)
  21557. Note:    the first segment table entry is entry number 1
  21558.  
  21559. Format of new executable entry table item (list):
  21560. Offset    Size    Description
  21561.  00h    BYTE    number of entry points (00h if end of entry table list)
  21562.  01h    BYTE    segment number (00h if end of entry table list)
  21563.  02h 3N BYTEs    entry records
  21564.         Offset    Size    Description
  21565.          00h    BYTE    flags
  21566.                 bit 0: exported
  21567.                 bit 1: single data
  21568.                 bits 2-7: unused???
  21569.          01h    WORD    offset within segment
  21570.  
  21571. Format of new executable relocation data (immediately follows segment image):
  21572. Offset    Size    Description
  21573.  00h    WORD    number of relocation items
  21574.  02h 8N BYTEs    relocation items
  21575.         Offset    Size    Description
  21576.          00h    BYTE    relocation type
  21577.                 00h LOBYTE
  21578.                 02h BASE
  21579.                 03h PTR
  21580.                 05h OFFS
  21581.                 0Bh PTR48
  21582.                 0Dh OFFS32
  21583.          01h    BYTE    flags
  21584.                 bit 2: additive
  21585.          02h    WORD    offset within segment
  21586.          04h    WORD    target address segment
  21587.          06h    WORD    target address offset
  21588.          
  21589. Format of new executable resource data:
  21590. Offset    Size    Description
  21591.  00h    WORD    alignment shift count for resource data
  21592.  02h  N RECORDs resources
  21593.     Format of resource record:
  21594.     Offset    Size    Description
  21595.      00h    WORD    type ID
  21596.             0000h if end of resource records
  21597.             >= 8000h if integer type
  21598.             else offset from start of resource table to type string
  21599.      02h    WORD    number of resources of this type
  21600.      04h    DWORD    reserved for runtime use
  21601.      08h  N Resources (see below)
  21602. Note:    resource type and name strings are stored immediately following the
  21603.       resource table, and are not null-terminated
  21604.  
  21605. Format of new executable resource entry:
  21606. Offset    Size    Description
  21607.  00h    WORD    offset in alignment units from start of file to contents of
  21608.         the resource data
  21609.  02h    WORD    length of resource image in bytes
  21610.  04h    WORD    flags
  21611.         bit 4: moveable
  21612.         bit 5: shareable
  21613.         bit 6: preloaded
  21614.  06h    WORD    resource ID
  21615.         >= 8000h if integer resource
  21616.         else offset from start of resource table to resource string
  21617.  08h    DWORD    reserved for runtime use
  21618. Notes:    resource type and name strings are stored immediately following the
  21619.       resource table, and are not null-terminated
  21620.     strings are counted strings, with a string of length 0 indicating the
  21621.       end of the resource table
  21622.  
  21623. Format of new executable module reference table [one bundle of entries]:
  21624. Offset    Size    Description
  21625.  00h    BYTE    number of records in this bundle (00h if end of table)
  21626.  01h    BYTE    segment indicator
  21627.         00h unused
  21628.         FFh movable segment, segment number is in entry
  21629.         else segment number of fixed segment
  21630.  02h  N RECORDs
  21631.     Format of segment record
  21632.     Offset    Size    Description
  21633.      00h    BYTE    flags
  21634.             bit 0: entry is exported
  21635.             bit 1: entry uses global (shared) data
  21636.             bits 7-3: number of parameter words
  21637.     ---fixed segment---
  21638.      01h    WORD    offset
  21639.     ---moveable segment---
  21640.      01h  2 BYTEs    INT 3F instruction (CDh 3Fh)
  21641.      03h    BYTE    segment number
  21642.      05h    WORD    offset
  21643. Note:    table entries are numbered starting from 1
  21644.  
  21645. Format of new executable resident/nonresident name table entry:
  21646. Offset    Size    Description
  21647.  00h    BYTE    length of string (00h if end of table)
  21648.  01h  N BYTEs    ASCII text of string
  21649.  N+1    WORD    ordinal number (index into entry table)
  21650. Notes:    the first string in the resident name table is the module name; the
  21651.       first entry in the nonresident name table is the module description
  21652.     the strings are case-sensitive; if the executable was linked with
  21653.       /IGNORECASE, all strings are in uppercase
  21654.  
  21655. Format of Linear Executable (enhanced mode executable) header:
  21656. Offset    Size    Description
  21657.  00h  2 BYTEs    "LE" (4Ch 45h) signature
  21658.  02h    BYTE    byte order (00h = little-endian, nonzero = big-endian)
  21659.  03h    BYTE    word order (00h = little-endian, nonzero = big-endian)
  21660.  04h    DWORD    executable format level
  21661.  08h    WORD    CPU type (see also INT 15/AH=C9h)
  21662.         01h Intel 80286 or upwardly compatible
  21663.         02h Intel 80386 or upwardly compatible            
  21664.         03h Intel 80486 or upwardly compatible            
  21665.         04h Intel 80586 or upwardly compatible
  21666.         20h Intel i860 (N10) or compatible
  21667.         21h Intel "N11" or compatible
  21668.         40h MIPS Mark I (R2000, R3000) or compatible
  21669.         41h MIPS Mark II (R6000) or compatible
  21670.         42h MIPS Mark III (R4000) or compatible
  21671.  0Ah    WORD    target operating system
  21672.         01h OS/2
  21673.         02h Windows
  21674.         03h European DOS 4.0
  21675.         04h Windows 386
  21676.  0Ch    DWORD    module version
  21677.  10h    DWORD    module type
  21678.         bit 2: initialization (only for DLLs)
  21679.             0 = global
  21680.             1 = per-process
  21681.         bit 4: no internal fixups in executable image
  21682.         bit 5: no external fixups in executable image
  21683.         bits 8,9,10:
  21684.             0 = unknown
  21685.             1 = incompatible with PM windowing \
  21686.             2 = compatible with PM windowing    > (only for
  21687.             3 = uses PM windowing API       /    programs)
  21688.         bit 13: module not loadable (only for programs)
  21689.         bit 15: module is DLL rather than program
  21690.  14h    DWORD    number of memory pages
  21691.  18h    Initial CS:EIP
  21692.     DWORD    object number
  21693.     DWORD    offset
  21694.  20h    Initial SS:ESP
  21695.     DWORD    object number
  21696.     DWORD    offset
  21697.  28h    DWORD    memory page size
  21698.  2Ch    DWORD    bytes on last page
  21699.  30h    DWORD    fixup section size
  21700.  34h    DWORD    fixup section checksum
  21701.  38h    DWORD    loader section size
  21702.  3Ch    DWORD    loader section checksum
  21703.  40h    DWORD    offset of object table (see below)
  21704.  44h    DWORD    object table entries
  21705.  48h    DWORD    object page map table offset
  21706.  4CH    DWORD    object iterate data map offset
  21707.  50h    DWORD    resource table offset
  21708.  54h    DWORD    resource table entries
  21709.  58h    DWORD    resident names table offset
  21710.  5Ch    DWORD    entry table offset
  21711.  60h    DWORD    module directives table offset
  21712.  64h    DWORD    Module Directives entries
  21713.  68h    DWORD    Fixup page table offset
  21714.  6Ch    DWORD    Fixup record table offset
  21715.  70h    DWORD    imported modules name table offset
  21716.  74h    DWORD    imported modules count
  21717.  78h    DWORD    imported procedures name table offset
  21718.  7Ch    DWORD    per-page checksum table offset
  21719.  80h    DWORD    data pages offset
  21720.  84h    DWORD    preload page count
  21721.  88h    DWORD    non-resident names table offset
  21722.  8Ch    DWORD    non-resident names table length
  21723.  90h    DWORD    non-resident names checksum
  21724.  94h    DWORD    automatic data object
  21725.  98h    DWORD    debug information offset
  21726.  9Ch    DWORD    debug information length
  21727.  A0h    DWORD    preload instance pages number
  21728.  A4h    DWORD    demand instance pages number
  21729.  A8h    DWORD    extra heap allocation
  21730.  ACh 20 BYTEs    reserved
  21731.  C0h    WORD    device ID (MS-Windows VxD only)
  21732.  C2h    WORD    DDK version (MS-Windows VxD only)
  21733. Note:    used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
  21734.  
  21735. Format of object table entry:
  21736. Offset    Size    Description
  21737.  00h    DWORD    virtual size in bytes
  21738.  04h    DWORD    relocation base address
  21739.  08h    DWORD    object flags
  21740.         bit 0: readable
  21741.         bit 1: writable
  21742.         bit 2: executable
  21743.         bit 3: resource
  21744.         bit 4: discardable
  21745.         bit 5: shared
  21746.         bit 6: preloaded
  21747.         bit 7: invalid
  21748.         bit 8-9: type
  21749.             00 normal
  21750.             01 zero-filled
  21751.             10 resident
  21752.             11 resident/contiguous
  21753.         bit 10: "RESIDENT/LONG_LOCKABLE"
  21754.         bit 11: reserved
  21755.         bit 12: "16:16_ALIAS"
  21756.         bit 13: "BIG" (Huge: 32-bit)
  21757.         bit 14: conforming
  21758.         bit 15: "OBJECT_I/O_PRIVILEGE_LEVEL"
  21759.         bits 16-31: reserved
  21760.  0Ch    DWORD    page map index
  21761.  10h    DWORD    page map entries
  21762.  14h  4 BYTEs    reserved??? (apparently always zeros)
  21763.  
  21764. Format of object page map table entry:
  21765. Offset    Size    Description
  21766.  00h    BYTE    ??? (usually 00h)
  21767.  01h    WORD    index to fixup table (big-endian)
  21768.         0000h if no relocation info
  21769.  03h    BYTE    type (00h hard copy in file, 03h some relocation needed)
  21770.  
  21771. Format of resident names table entry:
  21772. Offset    Size    Description
  21773.  00h    BYTE    length of name
  21774.  01h  N BYTEs    name
  21775.  N+1  3 BYTEs    ???
  21776.  
  21777. Format of linear executable entry table:
  21778. Offset    Size    Description
  21779.  00h    BYTE    number of entries in table
  21780.  01h 10 BYTEs per entry
  21781.         Offset    Size    Description
  21782.          00h    BYTE    bit flags
  21783.                 bit 0: non-empty bundle
  21784.                 bit 1: 32-bit entry
  21785.          01h    WORD    object number
  21786.          03h    BYTE    entry type flags
  21787.                 bit 0: exported
  21788.                 bit 1: uses single data rather than instance
  21789.                 bit 2: reserved
  21790.                 bits 3-7: number of stack parameters
  21791.          04h    DWORD    offset of entry point
  21792.          08h  2 BYTEs    ???
  21793. Note:    empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
  21794.       and do not contain the remaining nine bytes
  21795.  
  21796. Format of linear executable fixup record:
  21797. Offset    Size    Description
  21798.  00h    BYTE    type
  21799.         bits 7-4: modifier (0001 single, 0011 multiple)
  21800.         bits 3-0: type
  21801.             0000 byte offset
  21802.             0010 word segment
  21803.             0011 16-bit far pointer (DWORD)
  21804.             0101 16-bit offset
  21805.             0110 32-bit far pointer (PWORD)
  21806.             0111 32-bit offset
  21807.             1000 near call or jump, WORD/DWORD based on seg attrib
  21808.  01h    BYTE    fixup type
  21809.         bit 7:    ordinal is BYTE rather than WORD
  21810.         bit 5:    addition with DWORD rather than WORD
  21811.         bit 4:    reloation info has size with new two bytes at end
  21812.         bit 2:    set of add to destination, clear to replace destination
  21813.         bits 1-0: type
  21814.             00 internal fixup
  21815.             01 external fixup, imported by ordinal
  21816.             10 external fixup, imported by name
  21817. ---if single type---
  21818.  02h    WORD    offset within page
  21819.  04h    relocation information
  21820.     ---internal fixup---
  21821.     BYTE    object number
  21822.     ---external,ordinal---
  21823.     BYTE    one-based module number in Import Module table
  21824.     BYTE/WORD ordinal number
  21825.     WORD/DWORD value to add (only present if modifier bit 4 set)
  21826.     ---external,name---
  21827.     BYTE    one-based module number in Import Module table
  21828.     WORD    offset in Import Procedure names
  21829.     WORD/DWORD value to add (only present if modifier bit 4 set)
  21830. ---if multiple type---
  21831.  02h    BYTE    number of items
  21832.  03h    var    relocation info as for "single" type (see above)
  21833.       N WORDs    offsets of items to relocate
  21834.  
  21835. Format of Borland debugging information header (following load image):
  21836. Offset    Size    Description
  21837.  00h    WORD    signature 52FBh
  21838.  02h    WORD    version ID
  21839.  04h    DWORD    size of name pool in bytes
  21840.  08h    WORD    number of names in namem pool
  21841.  0Ah    WORD    number of type entries
  21842.  0Ch    WORD    number of structure members
  21843.  0Eh    WORD    number of symbols
  21844.  10h    WORD    number of global symbols
  21845.  12h    WORD    number of modules
  21846.  14h    WORD    number of locals (optional)
  21847.  16h    WORD    number of scopes in table
  21848.  18h    WORD    number of line-number entries
  21849.  1Ah    WORD    number of include files
  21850.  1Ch    WORD    number of segment records
  21851.  1Eh    WORD    number of segment/file correlations
  21852.  20h    DWORD    size of load image after removing uninitialized data and debug
  21853.         info
  21854.  24h    DWORD    debugger hook; pointer into debugged program whose meaning
  21855.         depends on program flags
  21856.  28h    BYTE    program flags
  21857.         bit 0: case-sensitive link
  21858.         bit 1: pascal overlay program
  21859.  29h    WORD    no longer used
  21860.  2Bh    WORD    size of data pool in bytes
  21861.  2Dh    BYTE    padding
  21862.  2Eh    WORD    size of following header extension (currently 00h, 10h, or 20h)
  21863.  30h    WORD    number of classes
  21864.  32h    WORD    number of parents
  21865.  34h    WORD    number of global classes (currently unused)
  21866.  36h    WORD    number of overloads (currently unused)
  21867.  38h    WORD    number of scope classes
  21868.  3Ah    WORD    number of module classes
  21869.  3Ch    WORD    number of coverage offsets
  21870.  3Eh    DWORD    offset relative to symbol base of name pool
  21871.  42h    WORD    number of browser information records
  21872.  44h    WORD    number of optimized symbol records
  21873.  46h    WORD    debugging flags
  21874.  48h  8 BYTEs    padding
  21875. Note:    additional information on the Borland debugging info may be found in
  21876.       Borland's Open Architecture Handbook
  21877. ----------214B-------------------------------
  21878. INT 21 - ELRES v1.0 only - INSTALLATION CHECK
  21879.     AH = 4Bh
  21880.     DS:DX = 0000h:0000h
  21881. Return: ES:BX -> ELRES history structure (see AH=2Bh/CX=454Ch)
  21882.     DX = DABEh (signature, DAve BEnnett)
  21883. Note:    ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett
  21884. SeeAlso: AH=2Bh/CX=454Ch
  21885. ----------214B04-----------------------------
  21886. INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
  21887.     AX = 4B04h
  21888. Return: CF clear if "MG" resident
  21889.     AX = 044Bh if "699"/"Thirteen Minutes" resident
  21890. SeeAlso: AX=4243h,AX=4B25h
  21891. ----------214B05-----------------------------
  21892. INT 21 - DOS 5.0 - SET EXECUTION STATE
  21893.     AX = 4B05h
  21894.     DS:DX -> execution state structure (see below)
  21895. Return: CF clear if successful
  21896.         AX = 0000h
  21897.     CF set on error
  21898.         AX = error code (see AH=59h)
  21899. Note:    used by programs which intercept AX=4B00h to prepare new programs for
  21900.       execution (including setting the DOS version number).     No DOS, BIOS
  21901.       or other software interrupt may be called after return from this call
  21902.       before commencement of the child process.  If DOS is running in the
  21903.       HMA, A20 is turned off on return from this call.
  21904. SeeAlso: AH=4Bh
  21905.  
  21906. Format of execution state structure:
  21907. Offset    Size    Description
  21908.  00h    WORD    reserved (00h)
  21909.  02h    WORD    type flags
  21910.         bit 0: program is an .EXE
  21911.             1: program is an overlay
  21912.  04h    DWORD    pointer to ASCIZ name of program file
  21913.  08h    WORD    PSP segment of new program
  21914.  0Ah    DWORD    starting CS:IP of new program
  21915.  0Eh    DWORD    program size including PSP
  21916. ----------214B25-----------------------------
  21917. INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
  21918.     AX = 4B25h
  21919. Return: DI = 1234h if resident
  21920. SeeAlso: AX=4B04h,AX=4B40h
  21921. ----------214B40-----------------------------
  21922. INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
  21923.     AX = 4B40h
  21924. Return: AX = 5678h if resident
  21925. SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
  21926. ----------214B41-----------------------------
  21927. INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
  21928.     AX = 4B41h
  21929.     ???
  21930. Return: ???
  21931. SeeAlso: AX=4B40h
  21932. ----------214B4A-----------------------------
  21933. INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
  21934.     AX = 4B4Ah
  21935. Return: AL = 57h if resident
  21936. SeeAlso: AX=4B40h,AX=4B4Bh
  21937. ----------214B4B-----------------------------
  21938. INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
  21939.     AX = 4B4Bh
  21940. Return: CF clear if resident
  21941. SeeAlso: AX=4B4Ah,AX=4B4Dh
  21942. ----------214B4D-----------------------------
  21943. INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
  21944.     AX = 4B4Dh
  21945. Return: CF clear if resident
  21946. SeeAlso: AX=4B4Ah,AX=4B50h
  21947. ----------214B50-----------------------------
  21948. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
  21949.     AX = 4B50h
  21950. Return: AX = 1234h if resident
  21951. SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
  21952. ----------214B53-----------------------------
  21953. INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
  21954.     AX = 4B53h
  21955. Return: CF clear if resident
  21956. SeeAlso: AX=4B50h,AX=4B55h
  21957. ----------214B55-----------------------------
  21958. INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
  21959.     AX = 4B55h
  21960. Return: AX = 1231h if resident
  21961. SeeAlso: AX=4B53h,AX=4B59h
  21962. ----------214B59-----------------------------
  21963. INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
  21964.     AX = 4B59h
  21965. Return: CF clear if resident
  21966. SeeAlso: AX=4B50h,AX=4B5Eh
  21967. ----------214B5E-----------------------------
  21968. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  21969.     AX = 4B5Eh
  21970. Return: CF clear if resident
  21971. SeeAlso: AX=4B59h,AX=4B87h
  21972. ----------214B60-----------------------------
  21973. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
  21974.     AX = 4B60h
  21975.     ???
  21976. Return: ???
  21977. SeeAlso: AX=4B50h
  21978. ----------214B87-----------------------------
  21979. INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
  21980.     AX = 4B87h
  21981. Return: AX = 6663h if resident
  21982. SeeAlso: AX=4B5Eh,AX=4B95h
  21983. ----------214B95-----------------------------
  21984. INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
  21985.     AX = 4B95h
  21986. Return: AX = 1973h if resident
  21987. SeeAlso: AX=4B87h,AX=4BA7h
  21988. ----------214BA7-----------------------------
  21989. INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
  21990.     AX = 4BA7h
  21991. Return: AX = B459h if resident
  21992. SeeAlso: AX=4B95h,AX=4BAAh
  21993. ----------214BAA-----------------------------
  21994. INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
  21995.     AX = 4BAAh
  21996. Return: CF clear if resident
  21997. SeeAlso: AX=4BA7h,AX=4BAFh
  21998. ----------214BAF-----------------------------
  21999. INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
  22000.     AX = 4BAFh
  22001. Return: AL = AFh if "Magnitogorsk" resident
  22002.     AL = FAh if "948"/"Screenplus1" resident
  22003. SeeAlso: AX=4BAAh,AX=4BDDh
  22004. ----------214BDD-----------------------------
  22005. INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
  22006.     AX = 4BDDh
  22007. Return: AX = 1234h
  22008. SeeAlso: AX=4BAFh,AX=4BFEh
  22009. ----------214BEE-----------------------------
  22010. INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
  22011.     AX = 4BEEh
  22012. Return: AX = 1234h if grab successful
  22013.        = 2345h if failed (INT 21 grabbed previously)
  22014. Notes:    F-DRIVER.SYS is part of the F-PROT virus/trojan protection package by
  22015.       Fridrik Skulason
  22016.     when called the first time, this function moves the INT 21 monitoring
  22017.       code from its original location in the INT 21 chain to be the first
  22018.       thing called by INT 21.  This is the mechanism used by F-NET.
  22019. SeeAlso: INT 2F/AX=4653h
  22020. ----------214BF0-----------------------------
  22021. INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
  22022.     AX = 4BF0h
  22023. Return: CF clear if installed
  22024.         AX = 899Dh
  22025. Note:    DIET is an executable-compression program
  22026. SeeAlso: AX=4BF1h
  22027. ----------214BF1-----------------------------
  22028. INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
  22029.     AX = 4BF1h
  22030. Return: ???
  22031. SeeAlso: AX=4BF0h
  22032. ----------214BFE-----------------------------
  22033. INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
  22034.     AX = 4BFEh
  22035. Return: AX = 1234h if "Hitchcock" resident
  22036.     AX = ABCDh if "1193"/"Copyright" resident
  22037.     DI = 55BBh if "Dark Avenger-1028" resident
  22038. SeeAlso: AX=4BDDh,AX=4BFFh"Justice"
  22039. ----------214BFF-----------------------------
  22040. INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
  22041.     AX = 4BFFh
  22042. Return: BL = FFh if "USSR-707" resident
  22043.     DI = 55AAh if "Justice" resident
  22044.     CF clear if "Europe 92" resident
  22045. SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
  22046. ----------214BFFSI0000-----------------------
  22047. INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
  22048.     AX = 4BFFh
  22049.     SI = 0000h
  22050.     DI = 0000h
  22051. Return: DI = 55AAh if installed
  22052. SeeAlso: AX=4BFFh"Justice",AX=5252h
  22053. ----------214C-------------------------------
  22054. INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
  22055.     AH = 4Ch
  22056.     AL = return code
  22057. Return: never returns
  22058. Notes:    unless the process is its own parent (see AH=26h, offset 16h in PSP),
  22059.       all open files are closed and all memory belonging to the process
  22060.       is freed
  22061.     all network file locks should be removed before calling this function
  22062. SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
  22063. SeeAlso: INT 60/DI=0601h
  22064. ----------214D-------------------------------
  22065. INT 21 - DOS 2+ - GET RETURN CODE
  22066.     AH = 4Dh
  22067. Return: AH = termination type
  22068.         00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
  22069.         01h control-C abort
  22070.         02h critical error abort
  22071.         03h terminate and stay resident (INT 21/AH=31h or INT 27)
  22072.     AL = return code
  22073. Notes:    the word in which DOS stores the return code is cleared after being
  22074.       read by this function, so the return code can only be retrieved once
  22075.     this call should not be used if the child was started with AX=4B04h;
  22076.       use AH=8Ah instead
  22077.     the following sequence will close a Virtual DOS Machine under OS/2 2.0:
  22078.       MOV    AH,4Dh
  22079.       INT    21h
  22080.       HLT
  22081.       DB    02h,0FDh
  22082.       This sequence is the only way to close a specific VDM which was
  22083.       booted from floppy or a disk image.
  22084. SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
  22085. ----------214E-------------------------------
  22086. INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
  22087.     AH = 4Eh
  22088.     AL = special flag for use by APPEND (see note below)
  22089.     CX = file attribute mask (see AX=4301h) (bits 0 and 5 ignored)
  22090.     DS:DX -> ASCIZ file specification (may include path and wildcards)
  22091. Return: CF clear if successful
  22092.         [DTA] = FindFirst data block (see below)
  22093.     CF set on error
  22094.         AX = error code (02h,03h,12h) (see AH=59h)
  22095. Notes:    for search attributes other than 08h, all files with at MOST the
  22096.       specified combination of hidden, system, and directory attributes
  22097.       will be returned.  Under DOS 2.x, searching for attribute 08h
  22098.       (volume label) will also return normal files, while under DOS 3+
  22099.       only the volume label (if any) will be returned.
  22100.     this call also returns successfully if given the name of a character
  22101.       device without wildcards.  DOS 2.x returns attribute 00h, size 0,
  22102.       and the current date and time.  DOS 3+ returns attribute 40h and the
  22103.       current date and time.
  22104.     immediately after an INT 2F/AX=B711h (APPEND return found name), the
  22105.       name at DS:DX will be overwritten; if AL=00h on entry, the actual
  22106.       found pathname will be stored, otherwise, the actual found path
  22107.       will be prepended to the original filespec without a path.
  22108.     under LANtastic, this call may be used to obtain a list of a server's
  22109.       shared resources by searching for "\\SERVER\*.*"; a list of printer
  22110.       resources may be obtained by searching for "\\SERVER\@*.*"
  22111.     under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
  22112. BUG:    under DOS 3.x and 4.x, the second and subsequent calls to this function
  22113.       with a character device name (no wildcards) and search attributes
  22114.       which include the volume-label bit (08h) will fail unless there is
  22115.       an intervening DOS call which implicitly or explicity performs a
  22116.       directory search without the volume-label bit.  Such implicit
  22117.       searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
  22118.       (AH=41h), and RENAME (AH=56h)
  22119. SeeAlso: AH=11h,AH=4Fh,AX=4301h,INT 2F/AX=111Bh,INT 2F/AX=B711h
  22120.  
  22121. Format of FindFirst data block:
  22122. Offset    Size    Description
  22123. ---PCDOS 3.10, PCDOS 4.01, MSDOS 3.2/3.3/5.0---
  22124.  00h    BYTE    drive letter (bits 0-6), remote if bit 7 set
  22125.  01h 11 BYTEs    search template
  22126.  0Ch    BYTE    search attributes
  22127. ---DOS 2.x (and some DOS 3.x???)---
  22128.  00h    BYTE    search attributes
  22129.  01h    BYTE    drive letter
  22130.  02h 11 BYTEs    search template
  22131. ---WILDUNIX.COM---
  22132.  00h 12 BYTEs    15-character wildcard search pattern and drive letter (packed)
  22133.  0Ch    BYTE    search attributes
  22134. ---DOS 2.x and most 3.x---
  22135.  0Dh    WORD    entry count within directory
  22136.  0Fh    DWORD    pointer to DTA???
  22137.  13h    WORD    cluster number of start of parent directory
  22138. ---PCDOS 4.01, MSDOS 3.2/3.3/5.0---
  22139.  0Dh    WORD    entry count within directory
  22140.  0Fh    WORD    cluster number of start of parent directory
  22141.  11h  4 BYTEs    reserved
  22142. ---all versions, documented fields---
  22143.  15h    BYTE    attribute of file found
  22144.  16h    WORD    file time
  22145.             bits 11-15: hour
  22146.             bits 5-10:    minute
  22147.             bits 0-4:    seconds/2
  22148.  18h    WORD    file date
  22149.             bits 9-15:    year-1980
  22150.             bits 5-8:    month
  22151.             bits 0-4:    day
  22152.  1Ah    DWORD    file size
  22153.  1Eh 13 BYTEs    ASCIZ filename+extension
  22154. ----------214E-------------------------------
  22155. INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
  22156.     AH = 4Eh
  22157.     DS:DX = 0000h:0000h
  22158. Return:    AH = 99h if installed
  22159. Note:    WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
  22160.       Hosgood and Terry Barnaby
  22161. ----------214F-------------------------------
  22162. INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
  22163.     AH = 4Fh
  22164.     [DTA] = data block from previous FindFirst or FindNext call
  22165. Return: CF clear if successful
  22166.     CF set on error
  22167.         AX = error code (12h) (see AH=59h)
  22168. SeeAlso: AH=12h,AH=4Eh
  22169. ----------2150-------------------------------
  22170. INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
  22171.     AH = 50h
  22172.     BX = segment of PSP for new process
  22173. Notes:    DOS uses the current PSP address to determine which processes own files
  22174.       and memory; it corresponds to process identifiers used by other OSs
  22175.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  22176.       handler without setting the Critical Error flag
  22177.     under DOS 3+, this function does not use any of the DOS-internal stacks
  22178.       and may thus be called at any time, even during another INT 21h call
  22179.     some Microsoft applications use segments of 0000h and FFFFh; although
  22180.       one should only call this function with valid PSP addresses, any
  22181.       program hooking it should be prepared to handle invalid addresses
  22182.     supported by OS/2 compatibility box
  22183.     this call was undocumented prior to the release of DOS 5.0
  22184. SeeAlso: AH=26h,AH=51h,AH=62h
  22185. ----------2151-------------------------------
  22186. INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
  22187.     AH = 51h
  22188. Return: BX = segment of PSP for current process
  22189. Notes:    DOS uses the current PSP address to determine which processes own files
  22190.       and memory; it corresponds to process identifiers used by other OSs
  22191.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  22192.       handler without setting the Critical Error flag
  22193.     under DOS 3+, this function does not use any of the DOS-internal stacks
  22194.       and may thus be called at any time, even during another INT 21h call
  22195.     supported by OS/2 compatibility box
  22196.     identical to the documented AH=62h
  22197.     undocumented for DOS 2.x-4.x, but newly documented for 5.0.
  22198. SeeAlso: AH=26h,AH=50h,AH=62h
  22199. ----------2152-------------------------------
  22200. INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
  22201.     AH = 52h
  22202. Return: ES:BX -> DOS list of lists
  22203. Note:    partially supported by OS/2 v1.1 compatibility box (however, most
  22204.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  22205.       pointer is FFFFh:FFFFh).
  22206.  
  22207. Format of List of Lists:
  22208. Offset    Size    Description
  22209.  -12    WORD    (DOS 3.1+) sharing retry count (see AX=440Bh)
  22210.  -10    WORD    (DOS 3.1+) sharing retry delay (see AX=440Bh)
  22211.  -8    DWORD    (DOS 3+) pointer to current disk buffer
  22212.  -4    WORD    (DOS 3+) pointer in DOS code segment of unread CON input
  22213.         when CON is read via a handle, DOS reads an entire line,
  22214.           and returns the requested portion, buffering the rest
  22215.           for the next read.  0000h indicates no unread input
  22216.  -2    WORD    segment of first memory control block
  22217.  00h    DWORD    pointer to first Drive Parameter Block (see AH=32h)
  22218.  04h    DWORD    pointer to first System File Table (see below)
  22219.  08h    DWORD    pointer to active CLOCK$ device's header
  22220.  0Ch    DWORD    pointer to active CON device's header
  22221. ---DOS 2.x---
  22222.  10h    BYTE    number of logical drives in system
  22223.  11h    WORD    maximum bytes/block of any block device
  22224.  13h    DWORD    pointer to first disk buffer (see below)
  22225.  17h 18 BYTEs    actual NUL device driver header (not a pointer!)
  22226.         NUL is always the first device on DOS's linked list of device 
  22227.         drivers. (see below)
  22228. ---DOS 3.0---
  22229.  10h    BYTE    number of block devices
  22230.  11h    WORD    maximum bytes/block of any block device
  22231.  13h    DWORD    pointer to first disk buffer (see below)
  22232.  17h    DWORD    pointer to array of current directory structures (see below)
  22233.  1Bh    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  22234.  1Ch    DWORD    pointer to STRING= workspace area
  22235.  20h    WORD    size of STRING area (the x in STRING=x from CONFIG.SYS)
  22236.  22h    DWORD    pointer to FCB table
  22237.  26h    WORD    the y in FCBS=x,y from CONFIG.SYS
  22238.  28h 18 BYTEs    actual NUL device driver header (not a pointer!)
  22239.         NUL is always the first device on DOS's linked list of device 
  22240.         drivers. (see below)
  22241. ---DOS 3.1-3.3---
  22242.  10h    WORD    maximum bytes per sector of any block device
  22243.  12h    DWORD    pointer to first disk buffer in buffer chain (see below)
  22244.  16h    DWORD    pointer to array of current directory structures (see below)
  22245.  1Ah    DWORD    pointer to system FCB tables (see below)
  22246.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  22247.  20h    BYTE    number of block devices installed
  22248.  21h    BYTE    number of available drive letters (largest of 5, installed
  22249.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  22250.         current directory structure array.
  22251.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  22252.         NUL is always the first device on DOS's linked list of device
  22253.         drivers. (see below)
  22254.  34h    BYTE    number of JOIN'ed drives
  22255. ---DOS 4.x---
  22256.  10h    WORD    maximum bytes per sector of any block device
  22257.  12h    DWORD    pointer to disk buffer info record (see below)
  22258.  16h    DWORD    pointer to array of current directory structures (see below)
  22259.  1Ah    DWORD    pointer to system FCB tables (see below)
  22260.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  22261.         (always 00h for DOS 5.0)
  22262.  20h    BYTE    number of block devices installed
  22263.  21h    BYTE    number of available drive letters (largest of 5, installed
  22264.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  22265.         current directory structure array.
  22266.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  22267.         NUL is always the first device on DOS's linked list of device
  22268.         drivers. (see below)
  22269.  34h    BYTE    number of JOIN'ed drives???
  22270.  35h    WORD    pointer within IBMDOS code segment to list of special program
  22271.         names (see below)
  22272.         (always 0000h for DOS 5.0)
  22273.  37h    DWORD    pointer to FAR routine for resident IFS utility functions
  22274.         (see below)
  22275.         may be called by any IFS driver which does not wish to
  22276.         service functions 20h or 24h-28h itself
  22277.  3Bh    DWORD    pointer to chain of IFS (installable file system) drivers
  22278.  3Fh    WORD    the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
  22279.  41h    WORD    the y in BUFFERS x,y
  22280.  43h    BYTE    boot drive (1=A:)
  22281.  44h    BYTE    01h if 80386+, 00h otherwise???
  22282.  45h    WORD    extended memory size in K
  22283. ---DOS 5.0---
  22284.  10h 39 BYTEs    as for DOS 4.x (see above)
  22285.  37h    DWORD    pointer to SETVER program list or 0000h:0000h
  22286.  3Bh    WORD    ??? pointer to function in DOS CS
  22287.  3Dh    WORD    ??? apparently 0000h if DOS loaded low, PSP of most-recently
  22288.         EXECed program if DOS in HMA
  22289.  3Fh  8 BYTEs    as for DOS 4.x (see above)
  22290.  
  22291. Format of memory control block (see also below):
  22292. Offset    Size    Description
  22293.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  22294.  01h    WORD    PSP segment of owner or
  22295.         0000h if free
  22296.         0006h if DR-DOS XMS UMB
  22297.         0007h if DR-DOS excluded upper memory ("hole")
  22298.         0008h if belongs to DOS
  22299.         FFFAh if 386MAX UMB control block
  22300.         FFFDh if 386MAX locked-out memory
  22301.         FFFEh if 386MAX UMB (immediately follows its control block)
  22302.  03h    WORD    size of memory block in paragraphs
  22303.  05h  3 BYTEs    unused
  22304. ---DOS 2.x,3.x---
  22305.  08h  8 BYTEs    unused
  22306. ---DOS 4+ ---
  22307.  08h  8 BYTEs    ASCII program name if PSP memory block or DR-DOS UMB,
  22308.           else garbage
  22309.         null-terminated if less than 8 characters
  22310. Notes:    the next MCB is at segment (current + size + 1)
  22311.     under DOS 3.1+, the first memory block is the DOS data segment,
  22312.       containing installable drivers, buffers, etc.     Under DOS 4+ it is
  22313.       divided into subsegments, each with its own memory control block
  22314.       (see below), the first of which is at offset 0000h.
  22315.     for DOS 5.0, blocks owned by DOS may have either "SC" or "SD" in bytes
  22316.       08h and 09h.    "SC" is system code or locked-out inter-UMB memory,
  22317.       "SD" is system data, device drivers, etc.
  22318.     Some versions of DR-DOS use only seven characters of the program name,
  22319.       placing a NUL in the eighth byte.
  22320.  
  22321. Format of MSDOS 5.0 UMB control block:
  22322. Offset    Size    Description
  22323.  00h    BYTE    type: 5Ah if last block in chain, 4Dh otherwise
  22324.  01h    WORD    first available paragraph in UMB if control block at start
  22325.         of UMB, 000Ah if control block at end of UMB
  22326.  03h    WORD    length in paragraphs of following UMB or locked-out region
  22327.  05h  3 BYTEs    unused
  22328.  08h  8 BYTEs    block type name: "UMB" if start block, "SM" if end block in UMB
  22329.  
  22330. Format of STARLITE (General Software's Embedded DOS) memory control block:
  22331. Offset    Size    Description
  22332.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  22333.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  22334.  03h    WORD    size of memory block in paragraphs
  22335.  05h    BYTE    unused
  22336.  06h    WORD    segment address of next memory control block (0000h if last)
  22337.  08h    WORD    segment address of previous memory control block or 0000h
  22338.  0Ah  6 BYTEs    reserved
  22339.  
  22340. Format of DOS 4.x data segment subsegment control blocks:
  22341. Offset    Size    Description
  22342.  00h    BYTE    subsegment type (blocks typically appear in this order)
  22343.         "D"  device driver
  22344.         "E"  device driver appendage
  22345.         "I"  IFS (Installable File System) driver
  22346.         "F"  FILES=  control block storage area (for FILES>5)
  22347.         "X"  FCBS=   control block storage area, if present
  22348.         "C"  BUFFERS EMS workspace area (if BUFFERS /X option used)
  22349.         "B"  BUFFERS=  storage area
  22350.         "L"  LASTDRIVE=     current directory structure array storage area
  22351.         "S"  STACKS=  code and data area, if present (see below)
  22352.         "T"  INSTALL= transient code
  22353.  01h    WORD    paragraph of subsegment start (usually the next paragraph)
  22354.  03h    WORD    size of subsegment in paragraphs
  22355.  05h  3 BYTEs    unused
  22356.  08h  8 BYTEs    for types "D" and "I", base name of file from which the driver
  22357.           was loaded (unused for other types)
  22358.  
  22359. Format of data at start of STACKS code segment (if present):
  22360. Offset    Size    Description
  22361.  00h    WORD    ???
  22362.  02h    WORD    number of stacks (the x in STACKS=x,y)
  22363.  04h    WORD    size of stack control block array (should be 8*x)
  22364.  06h    WORD    size of each stack (the y in STACKS=x,y)
  22365.  08h    DWORD    pointer to STACKS data segment
  22366.  0Ch    WORD    offset in STACKS data segment of stack control block array
  22367.  0Eh    WORD    offset in STACKS data segment of last element of that array
  22368.  10h    WORD    offset in STACKS data segment of the entry in that array for
  22369.         the next stack to be allocated (initially same as value in 0Eh
  22370.         and works its way down in steps of 8 to the value in 0Ch as
  22371.         hardware interrupts pre-empt each other)
  22372. Note:    the STACKS code segment data may, if present, be located as follows:
  22373.     DOS 3.2:    The code segment data is at a paragraph boundary fairly early
  22374.         in the IBMBIO segment (seen at 0070:0190h)
  22375.     DOS 3.3:    The code segment is at a paragraph boundary in the DOS data
  22376.         segment, which may be determined by inspecting the segment
  22377.         pointers of the vectors for those of interrupts 02h, 08h-0Eh,
  22378.         70h, 72-77h which have not been redirected by device drivers or
  22379.         TSRs.
  22380.     DOS 4.x:    Identified by sub-segment control block type "S" within the DOS
  22381.         data segment.
  22382.  
  22383. Format of array elements in STACKS data segment:
  22384. Offset    Size    Description
  22385.  00h    BYTE    status: 00h=free, 01h=in use, 03h=corrupted by overflow of
  22386.         higher stack.
  22387.  01h    BYTE    not used
  22388.  02h    WORD    previous SP
  22389.  04h    WORD    previous SS
  22390.  06h    WORD    ptr to word at top of stack (new value for SP). The word at the
  22391.         top of the stack is preset to point back to this control block.
  22392.  
  22393. SHARE.EXE hooks (DOS 3.1-5.00):
  22394. (offsets from first system file table--pointed at by ListOfLists+04h)
  22395. Offset    Size    Description
  22396. -3Ch    DWORD    pointer to FAR routine for ???
  22397.         Note: not called by MSDOS 3.3, set to 0000h:0000h by SHARE 3.3
  22398. -38h    DWORD    pointer to FAR routine called on opening file
  22399.         on call, internal DOS location points at filename(see AX=5D06h)
  22400.         Return: CF clear if successful
  22401.             CF set on error
  22402.                 AX = DOS error code (24h) (see AH=59h)
  22403.         Note: SHARE assumes DS=SS=DOS DS, direct-accesses DOS internals
  22404.             to get name of file just opened
  22405. -34h    DWORD    pointer to FAR routine called on closing file
  22406.         ES:DI -> system file table
  22407.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22408.             does something to every lock record for file
  22409. -30h    DWORD    pointer to FAR routine to close all files for given computer
  22410.         (called by AX=5D03h)
  22411.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22412. -2Ch    DWORD    pointer to FAR routine to close all files for given process
  22413.         (called by AX=5D04h)
  22414.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22415. -28h    DWORD    pointer to FAR routine to close file by name
  22416.         (called by AX=5D02h)
  22417.         DS:SI -> DOS parameter list (see AX=5D00h)
  22418.            DPL's DS:DX -> name of file to close
  22419.         Return: CF clear if successful
  22420.             CF set on error
  22421.                 AX = DOS error code (03h) (see AH=59h)
  22422.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22423. -24h    DWORD    pointer to FAR routine to lock region of file
  22424.         call with BX = file handle
  22425.               CX:DX = starting offset
  22426.               SI:AX = size
  22427.         Return: CF set on error
  22428.                 AL = DOS error code (21h) (see AH=59h)
  22429.         Note: not called if file is marked as remote
  22430.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22431. -20h    DWORD    pointer to FAR routine to unlock region of file
  22432.         call with BX = file handle
  22433.               CX:DX = starting offset
  22434.               SI:AX = size
  22435.         Return: CF set on error
  22436.                 AL = DOS error code (21h) (see AH=59h)
  22437.         Note: not called if file is marked as remote
  22438.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22439. -1Ch    DWORD    pointer to FAR routine to check if file region is locked
  22440.         call with ES:DI -> system file table entry for file
  22441.             CX = length of region from current position in file
  22442.         Return: CF set if any portion of region locked
  22443.                 AX = 0021h
  22444.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22445. -18h    DWORD    pointer to FAR routine to get open file list entry
  22446.         (called by AX=5D05h)
  22447.         call with DS:SI -> DOS parameter list (see AX=5D00h)
  22448.             DPL's BX = index of sharing record
  22449.             DPL's CX = index of SFT in SFT chain of sharing rec
  22450.         Return: CF set on error or not loaded
  22451.                 AX = DOS error code (12h) (see AH=59h)
  22452.             CF clear if successful
  22453.                 ES:DI -> filename
  22454.                 CX = number of locks owned by specified SFT
  22455.                 BX = network machine number
  22456.                 DX destroyed
  22457.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22458. -14h    DWORD    pointer to FAR routine for updating FCB from SFT???
  22459.         call with DS:SI -> unopened FCB
  22460.               ES:DI -> system file table entry
  22461.         Return: BL = C0h???
  22462.         Note: copies following fields from SFT to FCB:
  22463.            starting cluster of file      0Bh     1Ah
  22464.            sharing record offset      33h     1Ch
  22465.            file attribute          04h     1Eh
  22466. -10h    DWORD    pointer to FAR routine to get first cluster of FCB file ???
  22467.         call with ES:DI -> system file table entry
  22468.               DS:SI -> FCB
  22469.         Return: CF set if SFT closed or sharing record offsets
  22470.                 mismatched
  22471.             CF clear if successful
  22472.                 BX = starting cluster number from FCB
  22473. -0Ch    DWORD    pointer to FAR routine to close file if duplicate for process
  22474.         DS:SI -> system file table
  22475.         Return: AX = number of handle in JFT which already uses SFT
  22476.         Note: called during open/create of a file
  22477.         Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
  22478.         Note: if SFT was opened with inheritance enabled and sharing
  22479.             mode 111, does something to all other SFTs owned by
  22480.             same process which have the same file open mode and
  22481.             sharing record
  22482. -08h    DWORD    pointer to FAR routine for ???
  22483.         Note: SHARE assumes SS=DS=DOS DS, direct-accesses DOS internals
  22484.         Note: closes various handles referring to file most-recently
  22485.             opened
  22486. -04h    DWORD    pointer to FAR routine to update directory info in related SFT
  22487.           entries
  22488.         call with ES:DI -> system file table entry for file (see below)
  22489.               AX = subfunction (apply to each related SFT)
  22490.                 00h: update time stamp (offset 0Dh) and date
  22491.                      stamp (offset 0Fh)
  22492.                 01h: update file size (offset 11h) and starting
  22493.                      cluster (offset 0Bh).  Sets last-accessed
  22494.                      cluster fields to start of file if file
  22495.                      never accessed
  22496.                 02h: as function 01h, but last-accessed fields
  22497.                      always changed
  22498.                 03h: do both functions 00h and 02h
  22499.         Note: follows ptr at offset 2Bh in system file table entries
  22500.         Note: NOP if opened with no-inherit or via FCB
  22501.  
  22502. Format of sharing record:
  22503. Offset    Size    Description
  22504.  00h    BYTE    flag
  22505.         00h free block
  22506.         01h allocated block
  22507.         FFh end marker
  22508.  01h    WORD    size of block
  22509.  03h    BYTE    checksum of pathname (including NUL)
  22510.         if sum of ASCII values is N, checksum is (N/256 + N%256)
  22511.  04h    WORD    offset in SHARE's DS of lock record (see below)
  22512.  06h    DWORD    pointer to start of system file table chain for file
  22513.  0Ah    WORD    unique sequence number
  22514.  0Ch    var    ASCIZ full pathname
  22515.  
  22516. Format of SHARE.EXE lock record:
  22517. Offset    Size    Description
  22518.  00h    WORD    offset in SHARE's DS of next lock table in list
  22519.  02h    DWORD    offset in file of start of locked region
  22520.  06h    DWORD    offset in file of end of locked region
  22521.  0Ah    DWORD    pointer to System File Table entry for this file
  22522.  0Eh    WORD    PSP segment of lock's owner
  22523.  
  22524. Format of DOS 2.x system file tables:
  22525. Offset    Size    Description
  22526.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  22527.  04h    WORD    number of files in this table
  22528.  06h  28h bytes per file
  22529.     Offset    Size    Description
  22530.      00h    BYTE    number of file handles referring to this file
  22531.      01h    BYTE    file open mode (see AH=3Dh)
  22532.      02h    BYTE    file attribute
  22533.      03h    BYTE    drive (0 = character device, 1 = A, 2 = B, etc)
  22534.      04h 11 BYTEs    filename in FCB format (no path,no period,blank-padded)
  22535.      0Fh    WORD    ???
  22536.      11h    WORD    ???
  22537.      13h    DWORD    file size???
  22538.      17h    WORD    file date in packed format (see AX=5700h)
  22539.      19h    WORD    file time in packed format (see AX=5700h)
  22540.      1Bh    BYTE    device attribute (see AX=4400h)
  22541.     ---character device---
  22542.      1Ch    DWORD    pointer to device driver
  22543.     ---block device---
  22544.      1Ch    WORD    starting cluster of file
  22545.      1Eh    WORD    relative cluster in file of last cluster accessed
  22546.     ------
  22547.      20h    WORD    absolute cluster number of current cluster
  22548.      22h    WORD    ???
  22549.      24h    DWORD    current file position???
  22550.  
  22551. Format of DOS 3.0 system file tables and FCB tables:
  22552. Offset    Size    Description
  22553.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  22554.  04h    WORD    number of files in this table
  22555.  06h  38h bytes per file
  22556.     Offset    Size    Description
  22557.      00h-1Eh as for DOS 3.1+ (see below)
  22558.      1Fh    WORD    byte offset of directory entry within sector
  22559.      21h 11 BYTES    filename in FCB format (no path/period, blank-padded)
  22560.      2Ch    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  22561.      30h    WORD    (SHARE.EXE) ??? network machine number
  22562.      32h    WORD    PSP segment of file's owner (first three entries for
  22563.             AUX/CON/PRN contain segment of IO.SYS startup code)
  22564.      34h    WORD    (SHARE.EXE) offset in SHARE code seg of share record
  22565.      36h    WORD    ??? apparently always 0000h
  22566.  
  22567. Format of DOS 3.1-3.3x system file tables and FCB tables:
  22568. Offset    Size    Description
  22569.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  22570.  04h    WORD    number of files in this table
  22571.  06h  35h bytes per file
  22572.     Offset    Size    Description
  22573.      00h    WORD    number of file handles referring to this file
  22574.      02h    WORD    file open mode (see AH=3Dh)
  22575.             bit 15 set if this file opened via FCB
  22576.      04h    BYTE    file attribute (see AX=4301h)
  22577.      05h    WORD    device info word (see AX=4400h)
  22578.             bit 15 set if remote file
  22579.             bit 14 set means do not set file date/time on closing
  22580.             bit 12 set means don't inherit on EXEC
  22581.             bits 5-0 drive number for disk files
  22582.      07h    DWORD    pointer to device driver header if character device
  22583.             else pointer to DOS Drive Parameter Block (see AH=32h)
  22584.      0Bh    WORD    starting cluster of file
  22585.      0Dh    WORD    file time in packed format (see AX=5700h)
  22586.      0Fh    WORD    file date in packed format (see AX=5700h)
  22587.      11h    DWORD    file size
  22588.     ---system file table---
  22589.      15h    DWORD    current offset in file (may be larger than size of
  22590.             file; INT 21/AH=42h does not check new position)
  22591.     ---FCB table---
  22592.      15h    WORD    counter for last I/O to FCB
  22593.      17h    WORD    counter for last open of FCB
  22594.             (these are separate to determine the times of the
  22595.             latest I/O and open)
  22596.     ---
  22597.      19h    WORD    relative cluster within file of last cluster accessed
  22598.      1Bh    WORD    absolute cluster number of last cluster accessed
  22599.             0000h if file never read or written???
  22600.      1Dh    WORD    number of sector containing directory entry
  22601.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  22602.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  22603.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  22604.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  22605.      31h    WORD    PSP segment of file's owner (see AH=26h) (first three
  22606.             entries for AUX/CON/PRN contain segment of IO.SYS
  22607.             startup code)
  22608.      33h    WORD    offset within SHARE.EXE code segment of 
  22609.             sharing record (see above)  0000h = none
  22610.  
  22611. Format of DOS 4.0-5.0 system file tables and FCB tables:
  22612. Offset    Size    Description
  22613.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  22614.  04h    WORD    number of files in this table
  22615.  06h  3Bh bytes per file
  22616.     Offset    Size    Description
  22617.      00h    WORD    number of file handles referring to this file
  22618.      02h    WORD    file open mode (see AH=3Dh)
  22619.             bit 15 set if this file opened via FCB
  22620.      04h    BYTE    file attribute (see AX=4301h)
  22621.      05h    WORD    device info word (see AX=4400h)
  22622.             bit 15 set if remote file
  22623.             bit 14 set means do not set file date/time on closing
  22624.             bit 13 set if named pipe
  22625.             bit 12 set if no inherit
  22626.             bit 11 set if network spooler
  22627.      07h    DWORD    pointer to device driver header if character device
  22628.             else pointer to DOS Drive Parameter Block (see AH=32h)
  22629.             or REDIR data
  22630.      0Bh    WORD    starting cluster of file
  22631.      0Dh    WORD    file time in packed format (see AX=5700h)
  22632.      0Fh    WORD    file date in packed format (see AX=5700h)
  22633.      11h    DWORD    file size
  22634.      15h    DWORD    current offset in file
  22635.     ---local file---
  22636.      19h    WORD    relative cluster within file of last cluster accessed
  22637.      1Bh    DWORD    number of sector containing directory entry
  22638.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  22639.     ---network redirector---
  22640.      19h    DWORD    pointer to REDIRIFS record
  22641.      1Dh  3 BYTEs    ???
  22642.     ------
  22643.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  22644.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  22645.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  22646.      31h    WORD    PSP segment of file's owner (see AH=26h) (first three
  22647.             entries for AUX/CON/PRN contain segment of IO.SYS
  22648.             startup code)
  22649.      33h    WORD    offset within SHARE.EXE code segment of 
  22650.             sharing record (see above)  0000h = none
  22651.      35h    WORD    (local) absolute cluster number of last clustr accessed
  22652.             (redirector) ???
  22653.      37h    DWORD    pointer to IFS driver for file, 0000000h if native DOS
  22654.  
  22655. Format of current directory structure (CDS) (array, LASTDRIVE entries):
  22656. Offset    Size    Description
  22657.  00h 67 BYTEs    ASCIZ path in form X:\PATH (local) or \\MACH\PATH (network)
  22658.  43h    WORD    drive attributes (see also note below and AX=5F07h)
  22659.         bit 15: uses network redirector     \ invalid if 00, installable
  22660.             14: physical drive         / file system if 11
  22661.             13: JOIN'ed      \ path above is true path that would be
  22662.             12: SUBST'ed  / needed if not under SUBST or JOIN
  22663.  45h    DWORD    pointer to Drive Parameter Block for drive (see AH=32h)
  22664. ---local drives---
  22665.  49h    WORD    starting cluster of current directory
  22666.         0000h = root, FFFFh = never accessed
  22667.  4Bh    WORD    ??? seems to be FFFFh always
  22668.  4Dh    WORD    ??? seems to be FFFFh always
  22669. ---network drives---
  22670.  49h    DWORD    pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
  22671.  4Dh    WORD    stored user data from INT 21/AX=5F03h???
  22672. ------
  22673.  4Fh    WORD    offset in current directory path of backslash corresponding to
  22674.           root directory for drive
  22675.         this value specifies how many characters to hide from the
  22676.           "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
  22677.           drive letter and colon, SUBST, JOIN, and networks change it
  22678.           so that only the appropriate portion of the true path is
  22679.           visible to the user
  22680. ---DOS 4.x---
  22681.  51h    BYTE    ??? used by network
  22682.  52h    DWORD    pointer to IFS driver for this drive, 00000000h if native DOS
  22683.  56h    WORD    ???
  22684. Notes:    the path for invalid drives is normally set to X:\, but may be empty
  22685.       after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
  22686.     normally, only one of bits 13&12 may be set together with bit 14, but
  22687.       DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
  22688.       0001 SUBST, 0101 ASSIGN
  22689.  
  22690. Format of DR-DOS 5.0-6.0 current directory structure entry (array):
  22691. Offset    Size    Description
  22692.  00h 67 BYTEs    ASCIZ pathname of actual root directory for this logical drive
  22693.  43h    WORD    drive attributes
  22694.         1000h SUBSTed drive
  22695.         3000h??? JOINed drive
  22696.         4000h physical drive
  22697.         5000h ASSIGNed drive
  22698.         7000h JOINed drive
  22699.         8000h network drive
  22700.  45h    BYTE    physical drive number (0=A:) if this logical drive is valid
  22701.  46h    BYTE    ??? apparently flags for JOIN and ASSIGN
  22702.  47h    WORD    cluster number of start of parent directory (0000h = root)
  22703.  49h    WORD    entry number of current directory in parent directory
  22704.  4Bh    WORD    cluster number of start of current directory
  22705.  4Dh  2 BYTEs    used for media change detection (details not available)
  22706.  4Fh    WORD    cluster number of SUBST/JOIN "root" directory
  22707.         0000h if physical root directory
  22708.  
  22709. Format of device driver header:
  22710. Offset    Size    Description
  22711.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  22712.  04h    WORD    device attributes
  22713.         Character device:
  22714.            bit 15 set
  22715.            bit 14 IOCTL supported (see AH=44h)
  22716.            bit 13 (DOS 3+) output until busy supported
  22717.            bit 12 reserved
  22718.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  22719.            bits 10-8 reserved
  22720.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  22721.                 (see AX=4410h,AX=4411h)
  22722.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  22723.                 (see AX=440Ch,AX=440Dh)
  22724.            bit 5  reserved
  22725.            bit 4  device is special (use INT 29 "fast console output")
  22726.            bit 3  device is CLOCK$ (all reads/writes use transfer
  22727.                 record described below)
  22728.            bit 2  device is NUL
  22729.            bit 1  device is standard output
  22730.            bit 0  device is standard input
  22731.         Block device:
  22732.            bit 15 clear
  22733.            bit 14 IOCTL supported
  22734.            bit 13 non-IBM format
  22735.            bit 12 reserved
  22736.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  22737.            bit 10 reserved
  22738.            bit 9  direct I/O not allowed???
  22739.               (set by DOS 3.3 DRIVER.SYS for "new" drives)
  22740.            bit 8  ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  22741.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  22742.                 (see AX=4410h,AX=4411h)
  22743.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  22744.                 implies support for commands 17h and 18h
  22745.                 (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
  22746.            bits 5-2 reserved
  22747.            bit 1   driver supports 32-bit sector addressing
  22748.            bit 0   reserved
  22749.         Note: for European MSDOS 4.0, bit 11 also indicates that bits
  22750.             8-6 contain a version code (000 = DOS 3.0,3.1;
  22751.             001 = DOS 3.2, 010 = European DOS 4.0)
  22752.  06h    WORD    device strategy entry point
  22753.         call with ES:BX -> request header (see INT 2F/AX=0802h)
  22754.  08h    WORD    device interrupt entry point
  22755. ---character device---
  22756.  0Ah  8 BYTEs    blank-padded character device name
  22757. ---block device---
  22758.  0Ah    BYTE    number of subunits (drives) supported by driver
  22759.  0Bh  7 BYTEs    unused
  22760. ---
  22761.  12h    WORD    (CD-ROM driver) reserved, must be 0000h
  22762.  14h    BYTE    (CD-ROM driver) drive letter (must initially be 00h)
  22763.  15h    BYTE    (CD-ROM driver) number of units
  22764.  16h  6 BYTEs    (CD-ROM driver) signature 'MSCDnn' where 'nn' is version 
  22765.             (currently '00')
  22766.  
  22767. Format of CLOCK$ transfer record:
  22768. Offset    Size    Description
  22769.  00h    WORD    number of days since 1-Jan-1980
  22770.  02h    BYTE    minutes
  22771.  03h    BYTE    hours
  22772.  04h    BYTE    hundredths of second
  22773.  05h    BYTE    seconds
  22774.  
  22775. Format of DOS 2.x disk buffer:
  22776. Offset    Size    Description
  22777.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  22778.         least-recently used buffer is first in chain
  22779.  04h    BYTE    drive (0=A, 1=B, etc), FFh if not in use
  22780.  05h  3 BYTEs    unused??? (seems always to be 00h 00h 01h)
  22781.  08h    WORD    logical sector number
  22782.  0Ah    BYTE    number of copies to write (1 for non-FAT sectors)
  22783.  0Bh    BYTE    sector offset between copies if multiple copies to be written
  22784.  0Ch    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  22785.  10h        buffered data
  22786.  
  22787. Format of DOS 3.x disk buffer:
  22788. Offset    Size    Description
  22789.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  22790.         least-recently used buffer is first in chain
  22791.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  22792.  05h    BYTE    flags
  22793.         bit 7: ???
  22794.         bit 6: buffer dirty
  22795.         bit 5: buffer has been referenced
  22796.         bit 4: ???
  22797.         bit 3: sector in data area
  22798.         bit 2: sector in a directory, either root or subdirectory
  22799.         bit 1: sector in FAT
  22800.         bit 0: boot sector??? (guess)
  22801.  06h    WORD    logical sector number
  22802.  08h    BYTE    number of copies to write (1 for non-FAT sectors)
  22803.  09h    BYTE    sector offset between copies if multiple copies to be written
  22804.  0Ah    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  22805.  0Eh    WORD    unused??? (almost always 0)
  22806.  10h        buffered data
  22807.  
  22808. Format of DOS 4.00 (pre UR 25066) disk buffer info:
  22809. Offset    Size    Description
  22810.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  22811.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  22812.  06h    DWORD    pointer to lookahead buffer, zero if not present
  22813.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  22814.  0Ch    BYTE    00h if buffers in EMS (/X), FFh if not
  22815.  0Dh    WORD    EMS handle for buffers, zero if not in EMS
  22816.  0Fh    WORD    EMS physical page number used for buffers (usually 255)
  22817.  11h    WORD    ??? seems always to be 0001h
  22818.  13h    WORD    segment of EMS physical page frame
  22819.  15h    WORD    ??? seems always to be zero
  22820.  17h  4 WORDs    EMS partial page mapping information???
  22821.  
  22822. Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
  22823. Offset    Size    Description
  22824.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  22825.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  22826.  06h    DWORD    pointer to lookahead buffer, zero if not present
  22827.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  22828.  0Ch    BYTE    01h, possibly to distinguish from pre-UR 25066 format
  22829.  0Dh    WORD    ??? EMS segment for BUFFERS (only with /XD)
  22830.  0Fh    WORD    ??? EMS physical page number of EMS seg above (only with /XD)
  22831.  11h    WORD    ??? EMS segment for ??? (only with /XD)
  22832.  13h    WORD    ??? EMS physical page number of above (only with /XD)
  22833.  15h    BYTE    ??? number of EMS page frames present (only with /XD)
  22834.  16h    WORD    segment of one-sector workspace buffer allocated in main memory
  22835.           if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
  22836.           into EMS
  22837.  18h    WORD    EMS handle for buffers, zero if not in EMS
  22838.  1Ah    WORD    EMS physical page number used for buffers (usually 255)
  22839.  1Ch    WORD    ??? appears always to be 0001h
  22840.  1Eh    WORD    segment of EMS physical page frame
  22841.  20h    WORD    ??? appears always to be zero
  22842.  22h    BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
  22843.  
  22844. Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
  22845. Offset    Size    Description
  22846.  00h    WORD    EMS logical page number in which chain is resident, -1 if not
  22847.         in EMS
  22848.  02h    DWORD    pointer to least recently used buffer header.  All buffers on
  22849.         this chain are in the same segment.
  22850.  06h    BYTE    number of dirty buffers on this chain
  22851.  07h    BYTE    reserved (00h)
  22852. Notes:    buffered disk sectors are assigned to chain N where N is the sector's
  22853.       address modulo NDBCH,     0 <= N <= NDBCH-1
  22854.     each chain resides completely within one EMS page
  22855.     this structure is in main memory even if buffers are in EMS
  22856.  
  22857. Format of DOS 4.0-5.0 disk buffer:
  22858. Offset    Size    Description
  22859.  00h    WORD    forward ptr, offset only, to next least recently used buffer
  22860.  02h    WORD    backward ptr, offset only
  22861.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  22862.  05h    BYTE    flags
  22863.         bit 7: remote buffer
  22864.         bit 6: buffer dirty
  22865.         bit 5: buffer has been referenced
  22866.         bit 4: search data buffer (only valid if remote buffer)
  22867.         bit 3: sector in data area
  22868.         bit 2: sector in a directory, either root or subdirectory
  22869.         bit 1: sector in FAT
  22870.         bit 0: reserved
  22871.  06h    DWORD    logical sector number
  22872.  0Ah    BYTE    number of copies to write
  22873.         for FAT sectors, same as number of FATs
  22874.         for data and directory sectors, usually 1
  22875.  0Bh    WORD    offset in sectors between copies to write for FAT sectors
  22876.  0Dh    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  22877.  11h    WORD    buffer use count if remote buffer (see flags above)
  22878.  13h    BYTE    reserved
  22879.  14h        buffered data
  22880. Note:    for DOS 4.x, all buffered sectors which have the same hash value
  22881.       (computed as the sum of high and low words of the logical sector
  22882.       number divided by NDBCH) are on the same doubly-linked circular
  22883.       chain; for DOS 5.0, only a single circular chain exists.
  22884.     the links consist of offset addresses only, the segment being the same
  22885.       for all buffers in the chain.
  22886.  
  22887. Format of DOS 5.0 disk buffer info:
  22888. Offset    Size    Description
  22889.  00h    DWORD    pointer to least-recently-used buffer header (may be in HMA)
  22890.         (see above)
  22891.  04h    WORD    0000h (DOS 5 does not hash disk buffers, so offset 00h points
  22892.             directly at the only buffer chain)
  22893.  06h    DWORD    pointer to lookahead buffer, zero if not present
  22894.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  22895.  0Ch    BYTE    buffer location
  22896.         00h base memory, no workspace buffer
  22897.         01h HMA, workspace buffer in base memory
  22898.  0Dh    DWORD    pointer to one-segment workspace buffer in base memory
  22899.  11h  3 BYTEs    unused???
  22900.  14h    WORD    ???
  22901.  16h    BYTE    ??? apparently always 00h
  22902.  17h    BYTE    ??? apparently always FFh
  22903.  18h    BYTE    ??? apparently always 00h
  22904.  19h    BYTE    ??? apparently always 00h
  22905.  1Ah    WORD    ??? segment within HIMEM.SYS area when buffers are in HMA and
  22906.           UMBs are enabled???, else 0000h
  22907.  1Ch    BYTE    bit 0 set iff UMB MCB chain linked to normal MCB chain
  22908.  1Dh    WORD    ???
  22909.  1Fh    WORD    segment of first MCB in upper memory blocks or FFFFh if DOS
  22910.         memory chain in base 640K only (first UMB MCB usually at 9FFFh,
  22911.         locking out video memory with a DOS-owned memory block)
  22912.  21h    WORD    paragraph of start of most recent MCB chain search
  22913.  
  22914. Format of IFS driver list:
  22915. Offset    Size    Description
  22916.  00h    DWORD    pointer to next driver header
  22917.  04h  8 BYTEs    IFS driver name (blank padded), as used by FILESYS command
  22918.  0Ch  4 BYTEs    ???
  22919.  10h    DWORD    pointer to IFS utility function entry point (see below)
  22920.         call with ES:BX -> IFS request (see below)
  22921.  14h    WORD    offset in header's segment of driver entry point
  22922.     ???
  22923.  
  22924. Call IFS utility function entry point with:
  22925.     AH = 20h miscellaneous functions
  22926.         AL = 00h get date
  22927.         Return: CX = year
  22928.             DH = month
  22929.             DL = day
  22930.         AL = 01h get process ID and computer ID
  22931.         Return: BX = current PSP segment
  22932.             DX = active network machine number
  22933.         AL = 05h get file system info
  22934.         ES:DI -> 16-byte info buffer
  22935.         Return: buffer filled
  22936.             Offset    Size    Description
  22937.              00h  2 BYTEs    unused
  22938.              02h    WORD    number of SFTs (actually counts only
  22939.                     the first two file table arrays)
  22940.              04h    WORD    number of FCB table entries
  22941.              06h    WORD    number of proctected FCBs
  22942.              08h  6 BYTEs    unused
  22943.              0Eh    WORD    largest sector size supported
  22944.         AL = 06h get machine name
  22945.         ES:DI -> 18-byte buffer for name
  22946.         Return: buffer filled with name starting at offset 02h
  22947.         AL = 08h get sharing retry count
  22948.         Return: BX = sharing retry count
  22949.         AL = other
  22950.         Return: CF set
  22951.     AH = 21h get redirection state
  22952.         BH = type (03h disk, 04h printer)
  22953.         Return: BH = state (00h off, 01h on)
  22954.     AH = 22h ??? some sort of time calculation
  22955.         AL = 00h ???
  22956.             nonzero ???
  22957.     AH = 23h ??? some sort of time calculation
  22958.     AH = 24h compare filenames
  22959.         DS:SI -> first ASCIZ filename
  22960.         ES:DI -> second ASCIZ filename
  22961.         Return: ZF set if files are same ignoring case and / vs \
  22962.     AH = 25h normalize filename
  22963.         DS:SI -> ASCIZ filename
  22964.         ES:DI -> buffer for result
  22965.         Return: filename uppercased, forward slashes changed to backslashes
  22966.     AH = 26h get DOS stack
  22967.         Return: DS:SI -> top of stack
  22968.             CX = size of stack in bytes
  22969.     AH = 27h increment InDOS flag
  22970.     AH = 28h decrement InDOS flag
  22971. Note:    IFS drivers which do not wish to implement functions 20h or 24h-28h may
  22972.       pass them on to the default handler pointed at by [LoL+37h]
  22973.  
  22974. Format of IFS request block:
  22975. Offset    Size    Description
  22976.  00h    WORD    total size in bytes of request
  22977.  02h    BYTE    class of request
  22978.         02h ???
  22979.         03h redirection
  22980.         04h ???
  22981.         05h file access
  22982.         06h convert error code to string
  22983.         07h ???
  22984.  03h    WORD    returned DOS error code
  22985.  05h    BYTE    IFS driver exit status
  22986.         00h success
  22987.         01h ???
  22988.         02h ???
  22989.         03h ???
  22990.         04h ???
  22991.         FFh internal failure
  22992.  06h 16 BYTEs    ???
  22993. ---request class 02h---
  22994.  16h    BYTE    function code
  22995.         04h ???
  22996.  17h    BYTE    unused???
  22997.  18h    DWORD    pointer to ???
  22998.  1Ch    DWORD    pointer to ???
  22999.  20h  2 BYTEs    ???
  23000. ---request class 03h---
  23001.  16h    BYTE    function code
  23002.  17h    BYTE    ???
  23003.  18h    DWORD    pointer to ???
  23004.  1Ch    DWORD    pointer to ???
  23005.  22h    WORD    returned ???
  23006.  24h    WORD    returned ???
  23007.  26h    WORD    returned ???
  23008.  28h    BYTE    returned ???
  23009.  29h    BYTE    unused???
  23010. ---request class 04h---
  23011.  16h    DWORD    pointer to ???
  23012.  1Ah    DWORD    pointer to ???
  23013. ---request class 05h---
  23014.  16h    BYTE    function code
  23015.         01h flush disk buffers
  23016.         02h get disk space
  23017.         03h MKDIR
  23018.         04h RMDIR
  23019.         05h CHDIR
  23020.         06h delete file
  23021.         07h rename file
  23022.         08h search directory
  23023.         09h file open/create
  23024.         0Ah LSEEK
  23025.         0Bh read from file
  23026.         0Ch write to file
  23027.         0Dh lock region of file
  23028.         0Eh commit/close file
  23029.         0Fh get/set file attributes
  23030.         10h printer control
  23031.         11h ???
  23032.         12h process termination
  23033.         13h ???
  23034.     ---class 05h function 01h---
  23035.      17h  7    BYTEs    ???
  23036.      1Eh    DWORD    pointer to ???
  23037.      22h  4 BYTEs    ???
  23038.      26h    BYTE    ???
  23039.      27h    BYTE    ???
  23040.     ---class 05h function 02h---
  23041.      17h  7 BYTEs    ???
  23042.      1Eh    DWORD    pointer to ???
  23043.      22h  4 BYTEs    ???
  23044.      26h    WORD    returned total clusters
  23045.      28h    WORD    returned sectors per cluster
  23046.      2Ah    WORD    returned bytes per sector
  23047.      2Ch    WORD    returned available clusters
  23048.      2Eh    BYTE    returned ???
  23049.      2Fh    BYTE    ???
  23050.     ---class 05h functions 03h,04h,05h---
  23051.      17h  7 BYTEs    ???
  23052.      1Eh    DWORD    pointer to ???
  23053.      22h  4 BYTEs    ???
  23054.      26h    DWORD    pointer to directory name
  23055.     ---class 05h function 06h---
  23056.      17h  7 BYTEs    ???
  23057.      1Eh    DWORD    pointer to ???
  23058.      22h  4 BYTEs    ???
  23059.      26h    WORD    attribute mask
  23060.      28h    DWORD    pointer to filename
  23061.     ---class 05h function 07h---
  23062.      17h  7 BYTEs    ???
  23063.      1Eh    DWORD    pointer to ???
  23064.      22h  4 BYTEs    ???
  23065.      26h    WORD    attribute mask
  23066.      28h    DWORD    pointer to source filespec
  23067.      2Ch    DWORD    pointer to destination filespec
  23068.     ---class 05h function 08h---
  23069.      17h  7 BYTEs    ???
  23070.      1Eh    DWORD    pointer to ???
  23071.      22h  4 BYTEs    ???
  23072.      26h    BYTE    00h FINDFIRST
  23073.             01h FINDNEXT
  23074.      28h    DWORD    pointer to FindFirst search data + 01h if FINDNEXT
  23075.      2Ch    WORD    search attribute if FINDFIRST
  23076.      2Eh    DWORD    pointer to filespec if FINDFIRST
  23077.     ---class 05h function 09h---
  23078.      17h  7 BYTEs    ???
  23079.      1Eh    DWORD    pointer to ???
  23080.      22h    DWORD    pointer to IFS open file structure (see below)
  23081.      26h    WORD    ???  \ together, specify open vs. create, whether or
  23082.      28h    WORD    ???  / not to truncate
  23083.      2Ah  4 BYTEs    ???
  23084.      2Eh    DWORD    pointer to filename
  23085.      32h  4 BYTEs    ???
  23086.      36h    WORD    file attributes on call
  23087.             returned ???
  23088.      38h    WORD    returned ???
  23089.     ---class 05h function 0Ah---
  23090.      17h  7 BYTEs    ???
  23091.      1Eh    DWORD    pointer to ???
  23092.      22h    DWORD    pointer to IFS open file structure (see below)
  23093.      26h    BYTE    seek type (02h = from end)
  23094.      28h    DWORD    offset on call
  23095.             returned new absolute position
  23096.     ---class 05h functions 0Bh,0Ch---
  23097.      17h  7 BYTEs    ???
  23098.      1Eh    DWORD    pointer to ???
  23099.      22h    DWORD    pointer to IFS open file structure (see below)
  23100.      28h    WORD    number of bytes to transfer
  23101.             returned bytes actually transferred
  23102.      2Ah    DWORD    transfer address
  23103.     ---class 05h function 0Dh---
  23104.      17h  7 BYTEs    ???
  23105.      1Eh    DWORD    pointer to ???
  23106.      22h    DWORD    pointer to IFS open file structure (see below)
  23107.      26h    BYTE    file handle???
  23108.      27h    BYTE    unused???
  23109.      28h    WORD    ???
  23110.      2Ah    WORD    ???
  23111.      2Ch    WORD    ???
  23112.      2Eh    WORD    ???
  23113.     ---class 05h function 0Eh---
  23114.      17h  7 BYTEs    ???
  23115.      1Eh    DWORD    pointer to ???
  23116.      22h    DWORD    pointer to IFS open file structure (see below)
  23117.      26h    BYTE    00h commit file
  23118.             01h close file
  23119.      27h    BYTE    unused???
  23120.     ---class 05h function 0Fh---
  23121.      17h  7 BYTEs    ???
  23122.      1Eh    DWORD    pointer to ???
  23123.      22h  4 BYTEs    ???
  23124.      26h    BYTE    02h GET attributes
  23125.             03h PUT attributes
  23126.      27h    BYTE    unused???
  23127.      28h 12 BYTEs    ???
  23128.      34h    WORD    search attributes???
  23129.      36h    DWORD    pointer to filename
  23130.      3Ah    WORD    (GET) returned ??? 
  23131.      3Ch    WORD    (GET) returned ???
  23132.      3Eh    WORD    (GET) returned ???
  23133.      40h    WORD    (GET) returned ???
  23134.      42h    WORD    (PUT) new attributes
  23135.             (GET) returned attributes
  23136.     ---class 05h function 10h---
  23137.      17h  7 BYTEs    ???
  23138.      1Eh    DWORD    pointer to ???
  23139.      22h    DWORD    pointer to IFS open file structure (see below)
  23140.      26h    WORD    ???
  23141.      28h    DWORD    pointer to ???
  23142.      2Ch    WORD    ???
  23143.      2Eh    BYTE    ???
  23144.      2Fh    BYTE    subfunction
  23145.             01h get printer setup
  23146.             03h ???
  23147.             04h ???
  23148.             05h ???
  23149.             06h ???
  23150.             07h ???
  23151.             21h set printer setup
  23152.     ---class 05h function 11h---
  23153.      17h  7 BYTEs    ???
  23154.      1Eh    DWORD    pointer to ???
  23155.      22h    DWORD    pointer to IFS open file structure (see below)
  23156.      26h    BYTE    subfunction
  23157.      27h    BYTE    unused???
  23158.      28h    WORD    ???
  23159.      2Ah    WORD    ???
  23160.      2Ch    WORD    ???
  23161.      2Eh    BYTE    ???
  23162.      2Fh    BYTE    ???
  23163.     ---class 05h function 12h---
  23164.      17h 15 BYTEs    unused???
  23165.      26h    WORD    PSP segment
  23166.      28h    BYTE    type of process termination
  23167.      29h    BYTE    unused???
  23168.     ---class 05h function 13h---
  23169.      17h 15 BYTEs    unused???
  23170.      26h    WORD    PSP segment
  23171. ---request class 06h---
  23172.  16h    DWORD    returned pointer to string corresponding to error code at 03h
  23173.  1Ah    BYTE    returned ???
  23174.  1Bh    BYTE    unused
  23175. ---request class 07h---
  23176.  16h    DWORD    pointer to IFS open file structure (see below)
  23177.  1Ah    BYTE    ???
  23178.  1Bh    BYTE    unused???
  23179.  
  23180. Format of IFS open file structure:
  23181. Offset    Size    Description
  23182.  00h    WORD    ???
  23183.  02h    WORD    device info word
  23184.  04h    WORD    file open mode
  23185.  06h    WORD    ???
  23186.  08h    WORD    file attributes
  23187.  0Ah    WORD    owner's network machine number
  23188.  0Ch    WORD    owner's PSP segment
  23189.  0Eh    DWORD    file size
  23190.  12h    DWORD    current offset in file
  23191.  16h    WORD    file time
  23192.  18h    WORD    file date
  23193.  1Ah 11 BYTEs    filename in FCB format
  23194.  25h    WORD    ???
  23195.  27h    WORD    hash value of SFT address
  23196.         (low word of linear address + segment&F000h)
  23197.  29h  3 WORDs    network info from SFT
  23198.  2Fh    WORD    ???
  23199.  
  23200. Format of one item in DOS 4+ list of special program names:
  23201. Offset    Size    Description
  23202.  00h    BYTE    length of name (00h = end of list)
  23203.  01h  N BYTEs    name in format name.ext
  23204.  N    2 BYTEs    DOS version to return for program (major,minor)
  23205.         (see AH=30h,INT 2F/AX=122Fh)
  23206. ---DOS 4 only---
  23207.  N+2    BYTE    number of times to return fake version number (FFh = always)
  23208. Note:    if the name of the executable for the program making the DOS "get
  23209.       version" call matches one of the names in this list, DOS returns the
  23210.       specified version rather than the true version number
  23211. ----------215252-----------------------------
  23212. INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
  23213.     AX = 5252h
  23214. Return: BX = FFEEh if resident
  23215. SeeAlso: AX=4BFFh"Cascade",AX=58CCh
  23216. ----------2153-------------------------------
  23217. INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
  23218.     AH = 53h
  23219.     DS:SI -> BIOS Parameter Block (see below)
  23220.     ES:BP -> buffer for Drive Parameter Block (see AH=32h for format)
  23221. Return: ES:BP buffer filled
  23222. Note:    for DOS 3+, the cluster at which to start searching is set to 0000h
  23223.       and the number of free clusters is set to FFFFh (unknown)
  23224.  
  23225. Format of BIOS Parameter Block:
  23226. Offset    Size    Description
  23227.  00h    WORD    number of bytes per sector
  23228.  02h    BYTE    number of sectors per cluster
  23229.  03h    WORD    number of reserved sectors at start of disk
  23230.  05h    BYTE    number of FATs
  23231.  06h    WORD    number of entries in root directory
  23232.  08h    WORD    total number of sectors
  23233.         for DOS 4+, set to zero if partition >32M, then set DWORD at
  23234.           15h to actual number of sectors
  23235.  0Ah    BYTE    media ID byte
  23236.  0Bh    WORD    number of sectors per FAT
  23237. ---DOS 3+---
  23238.  0Dh    WORD    number of sectors per track
  23239.  0Fh    WORD    number of heads
  23240.  11h    DWORD    number of hidden sectors
  23241.  15h 11 BYTEs    reserved    
  23242. ---DOS 4+ ---
  23243.  15h    DWORD    total number of sectors if word at 08h contains zero
  23244.  19h  6 BYTEs    ???
  23245.  1Fh    WORD    number of cylinders
  23246.  21h    BYTE    device type
  23247.  22h    WORD    device attributes (removable or not, etc)
  23248. ---European MSDOS 4.00---
  23249.  15h    DWORD    total number of sectors if word at 08h contains zero
  23250.         (however, this DOS does not actually implement >32M partitions)
  23251. ----------2154-------------------------------
  23252. INT 21 - DOS 2+ - GET VERIFY FLAG
  23253.     AH = 54h
  23254. Return: AL = verify flag
  23255.         00h off
  23256.         01h on (all disk writes verified after writing)
  23257. SeeAlso: AH=2Eh
  23258. ----------2155-------------------------------
  23259. INT 21 - DOS 2+ internal - CREATE CHILD PSP
  23260.     AH = 55h
  23261.     DX = segment at which to create new PSP
  23262.     SI = (DOS 3+) value to place in memory size field at DX:[0002h]
  23263. Return: CF clear if successful
  23264.  
  23265. Notes:    creates a "child" PSP rather than making an exact copy of the current
  23266.       PSP; the new PSP's parent pointer is set to the current PSP and the
  23267.       reference count for each inherited file is incremented
  23268.     (DOS 2+) sets current PSP to DX
  23269.     (DOS 3+) marks "no inherit" file handles as closed in child PSP
  23270. SeeAlso: AH=26h,AH=50h
  23271. ----------2156-------------------------------
  23272. INT 21 - DOS 2+ - "RENAME" - RENAME FILE
  23273.     AH = 56h
  23274.     DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
  23275.     ES:DI -> ASCIZ new filename (no wildcards)
  23276.     CL = attribute mask (server call only, see below)
  23277. Return: CF clear if successful
  23278.     CF set on error
  23279.         AX = error code (02h,03h,05h,11h) (see AH=59h)
  23280. Notes:    allows move between directories on same logical volume
  23281.     does not set the archive attribute (see AX=4300h), which results in
  23282.       incremental backups not backing up the file under its new name
  23283.     open files should not be renamed
  23284.     (DOS 3+) allows renaming of directories
  23285.     (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  23286.       error 12h (no more files) is returned on success, and both source and
  23287.       destination specs must be canonical (as returned by AH=60h).
  23288.       Wildcards in the destination are replaced by the corresponding char
  23289.       of each source file being renamed.  Under DOS 3.x, the call will fail
  23290.       if the destination wildcard is *.* or equivalent.  When invoked via
  23291.       AX=5D00h, only those files matching the attribute mask in CL are
  23292.       renamed.
  23293.     under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
  23294.       and the new-name pointer is in ES:EDI (DS must equal ES)
  23295. SeeAlso: AH=17h,AX=4301h,AH=60h,AX=5D00h
  23296. ----------215700-----------------------------
  23297. INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
  23298.     AX = 5700h
  23299.     BX = file handle
  23300. Return: CF clear if successful
  23301.         CX = file's time
  23302.         bits 15-11: hours (0-23)
  23303.              10-5:  minutes
  23304.               4-0:  seconds/2
  23305.         DX = file's date
  23306.         bits 15-9: year - 1980
  23307.               8-5: month
  23308.               4-0: day
  23309.     CF set on error
  23310.         AX = error code (01h,06h) (see AH=59h)
  23311. SeeAlso: AX=5701h
  23312. ----------215701-----------------------------
  23313. INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
  23314.     AX = 5701h
  23315.     BX = file handle
  23316.     CX = new time (see AX=5700h)
  23317.     DX = new date (see AX=5700h)
  23318. Return: CF clear if successful
  23319.     CF set on error
  23320.         AX = error code (01h,06h) (see AH=59h)
  23321. SeeAlso: AX=5700h
  23322. ----------215702-----------------------------
  23323. INT 21 - DOS 4.x only - GET ???
  23324.     AX = 5702h
  23325.     BX = ??? (0000h through 0004h)
  23326.     DS:SI -> ???
  23327.     ES:DI -> result buffer
  23328.     CX = size of result buffer
  23329. Return: CX = size of returned data
  23330. SeeAlso: AX=5703h,AX=5704h
  23331. ----------215703-----------------------------
  23332. INT 21 - DOS 4.x only - GET ???
  23333.     AX = 5703h
  23334.     BX = file handle (only 0000h through 0004h valid)
  23335.     DS:SI -> ??? passed through to INT 2F/AX=112Dh
  23336.     ES:DI -> result buffer
  23337.     CX = size of result buffer
  23338. Return: CX = size of returned data
  23339.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  23340. SeeAlso: AX=5702h,AX=5704h,INT 2F/AX=112Dh
  23341. ----------215704-----------------------------
  23342. INT 21 - DOS 4.x only - TRUNCATE OPEN FILE TO ZERO LENGTH
  23343.     AX = 5704h
  23344.     BX = file handle (only 0000h through 0004h valid)
  23345.     DS:SI -> ??? passed through to INT 2F/AX=112Dh
  23346.     ES:DI -> result buffer
  23347.     CX = size of result buffer
  23348. Return: CX = size of returned data
  23349.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  23350. SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
  23351. ----------2158-------------------------------
  23352. INT 21 - DOS 3+ - GET OR SET MEMORY ALLOCATION STRATEGY
  23353.     AH = 58h
  23354.     AL = subfunction
  23355.         00h get allocation strategy
  23356.         Return: AX = current strategy
  23357.                 00h low memory first fit
  23358.                 01h low memory best fit
  23359.                 02h low memory last fit
  23360.              ---DOS 5.0---
  23361.                 40h high memory first fit
  23362.                 41h high memory best fit
  23363.                 42h high memory last fit
  23364.                 80h first fit, try high then low memory
  23365.                 81h best fit, try high then low memory
  23366.                 82h last fit, try high then low memory
  23367.         01h set allocation strategy
  23368.         BL = new allocation strategy (see above)
  23369.         BH = 00h (DOS 5.0)
  23370. Return: CF clear if successful
  23371.     CF set on error
  23372.         AX = error code (01h) (see AH=59h)
  23373. Notes:    the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
  23374.       2 or greater means last fit
  23375.     the Get subfunction returns the last value set
  23376.     a program which changes the allocation strategy should restore it
  23377.       before terminating
  23378.     Toshiba MSDOS 2.11 supports subfunctions 00h and 01h
  23379.     DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
  23380. SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh
  23381. ----------2158-------------------------------
  23382. INT 21 - DOS 5.0 - GET OR SET UMB LINK STATE
  23383.     AH = 58h
  23384.     AL = subfunction
  23385.         02h get UMB link state
  23386.         Return: AL = 00h UMBs not part of DOS memory chain
  23387.                = 01h UMBs in DOS memory chain
  23388.         03h set UMB link state
  23389.         BX = 0000h remove UMBs from DOS memory chain
  23390.            = 0001h add UMBs to DOS memory chain
  23391. Return: CF clear if successful
  23392.     CF set on error
  23393.         AX = error code (01h) (see AH=59h)
  23394. Note:    a program which changes the UMB link state should restore it before
  23395.       terminating
  23396. ----------2158CC-----------------------------
  23397. INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
  23398.     AX = 58CCh
  23399. Return: CF clear if resident
  23400. SeeAlso: AX=5252h,AX=6969h
  23401. ----------2159--BX0000-----------------------
  23402. INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
  23403.     AH = 59h
  23404.     BX = 0000h
  23405. Return: AX = extended error code (see below)
  23406.     BH = error class (see below)
  23407.     BL = recommended action (see below)
  23408.     CH = error locus (see below)
  23409.     ES:DI may be pointer (see error code list below)
  23410.     CL, DX, SI, BP, and DS destroyed
  23411. Notes:    functions available under DOS 2.x map the true DOS 3+ error code into
  23412.       one supported under DOS 2.x
  23413.     you should call this function to retrieve the true error code when an
  23414.       FCB or DOS 2.x call returns an error
  23415. SeeAlso: AX=5D0Ah,INT 2F/AX=122Dh
  23416.  
  23417. Values for extended error code:
  23418.     00h no error
  23419.     01h function number invalid
  23420.     02h file not found
  23421.     03h path not found
  23422.     04h too many open files (no handles available)
  23423.     05h access denied
  23424.     06h invalid handle
  23425.     07h memory control block destroyed
  23426.     08h insufficient memory
  23427.     09h memory block address invalid
  23428.     0Ah environment invalid (usually >32K in length)
  23429.     0Bh format invalid
  23430.     0Ch access code invalid
  23431.     0Dh data invalid
  23432.     0Eh reserved
  23433.     0Fh invalid drive
  23434.     10h attempted to remove current directory
  23435.     11h not same device
  23436.     12h no more files
  23437. ---DOS 3+---
  23438.     13h disk write-protected
  23439.     14h unknown unit
  23440.     15h drive not ready
  23441.     16h unknown command
  23442.     17h data error (CRC)
  23443.     18h bad request structure length
  23444.     19h seek error
  23445.     1Ah unknown media type (non-DOS disk)
  23446.     1Bh sector not found
  23447.     1Ch printer out of paper
  23448.     1Dh write fault
  23449.     1Eh read fault
  23450.     1Fh general failure
  23451.     20h sharing violation
  23452.     21h lock violation
  23453.     22h disk change invalid
  23454.         ES:DI -> ASCIZ volume label of required disk
  23455.     23h FCB unavailable
  23456.     24h sharing buffer overflow
  23457.     25h (DOS 4+) code page mismatch
  23458.     26h (DOS 4+) cannot complete file operation (out of input)
  23459.     27h (DOS 4+) insufficient disk space
  23460.     28h-31h reserved
  23461.     32h network request not supported
  23462.     33h remote computer not listening
  23463.     34h duplicate name on network
  23464.     35h network name not found
  23465.     36h network busy
  23466.     37h network device no longer exists
  23467.     38h network BIOS command limit exceeded
  23468.     39h network adapter hardware error
  23469.     3Ah incorrect response from network
  23470.     3Bh unexpected network error
  23471.     3Ch incompatible remote adapter
  23472.     3Dh print queue full
  23473.     3Eh queue not full
  23474.     3Fh not enough space to print file
  23475.     40h network name was deleted
  23476.     41h network: Access denied
  23477.     42h network device type incorrect
  23478.     43h network name not found
  23479.     44h network name limit exceeded
  23480.     45h network BIOS session limit exceeded
  23481.     46h temporarily paused
  23482.     47h network request not accepted
  23483.     48h network print/disk redirection paused
  23484.     49h (LANtastic) invalid network version
  23485.     4Ah (LANtastic) account expired
  23486.     4Bh (LANtastic) password expired
  23487.     4Ch (LANtastic) login attempt invalid at this time
  23488.     4Dh (LANtastic v3+) disk limit exceeded on network node
  23489.     4Eh (LANtastic v3+) not logged in to network node
  23490.     4Fh reserved
  23491.     50h file exists
  23492.     51h reserved
  23493.     52h cannot make directory
  23494.     53h fail on INT 24h
  23495.     54h (DOS 3.3+) too many redirections
  23496.     55h (DOS 3.3+) duplicate redirection
  23497.     56h (DOS 3.3+) invalid password
  23498.     57h (DOS 3.3+) invalid parameter
  23499.     58h (DOS 3.3+) network write fault
  23500.     59h (DOS 4+) function not supported on network
  23501.     5Ah (DOS 4+) required system component not installed
  23502.  
  23503. Values for Error Class:
  23504.     01h out of resource (storage space or I/O channels)
  23505.     02h temporary situation (file or record lock)
  23506.     03h authorization (denied access)
  23507.     04h internal (system software bug)
  23508.     05h hardware failure
  23509.     06h system failure (configuration file missing or incorrect)
  23510.     07h application program error
  23511.     08h not found
  23512.     09h bad format
  23513.     0Ah locked
  23514.     0Bh media error
  23515.     0Ch already exists
  23516.     0Dh unknown
  23517.  
  23518. Values for Suggested Action:
  23519.     01h retry
  23520.     02h delayed retry
  23521.     03h prompt user to reenter input
  23522.     04h abort after cleanup
  23523.     05h immediate abort
  23524.     06h ignore
  23525.     07h retry after user intervention
  23526.  
  23527. Values for Error Locus:
  23528.     01h unknown or not appropriate
  23529.     02h block device (disk error)
  23530.     03h network related
  23531.     04h serial device (timeout)
  23532.     05h memory related
  23533. ----------2159--BX0001-----------------------
  23534. INT 21 - European MSDOS 4.0 - GET HARD ERROR INFORMATION
  23535.     AH = 59h
  23536.     BX = 0001h
  23537. Return: ES:DI -> hard error information packet (see below) for most recent
  23538.         hard (critical) error
  23539. SeeAlso: AH=95h,INT 24
  23540.  
  23541. Format of hard error information packet:
  23542. Offset    Size    Description
  23543.  00h    WORD    contents of AX at system entry
  23544.  02h    WORD    Process ID which encountered error
  23545.  04h    WORD    contents of AX at time of error
  23546.  06h    BYTE    error type
  23547.         00h physical I/O error
  23548.         01h disk change request
  23549.         02h file sharing violation
  23550.         03h FCB problem
  23551.         04h file locking violation
  23552.         05h bad FAT
  23553.         06h network detected error
  23554.  07h    BYTE    INT 24 error code
  23555.  08h    WORD    extended error code (see AH=59h/BX=0000h)
  23556.  0Ah    DWORD    pointer to associated device
  23557. ----------215A-------------------------------
  23558. INT 21 - DOS 3+ - CREATE TEMPORARY FILE
  23559.     AH = 5Ah
  23560.     CX = file attribute (see AX=4301h)
  23561.     DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
  23562.         generated filename
  23563. Return: CF clear if successful
  23564.         AX = file handle opened for read/write in compatibility mode
  23565.         DS:DX pathname extended with generated name for temporary file
  23566.     CF set on error
  23567.         AX = error code (03h,04h,05h) (see AH=59h)
  23568. Notes:    creates a file with a unique name which must be explicitly deleted
  23569.     COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
  23570.       wraps around to the end of the segment
  23571.     under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
  23572. SeeAlso: AH=3Ch,AH=5Bh
  23573. ----------215B-------------------------------
  23574. INT 21 - DOS 3+ - CREATE NEW FILE
  23575.     AH = 5Bh
  23576.     CX = file attribute (see AX=4301h)
  23577.     DS:DX -> ASCIZ filename
  23578. Return: CF clear if successful
  23579.         AX = file handle opened for read/write in compatibility mode
  23580.     CF set on error
  23581.         AX = error code (03h,04h,05h,50h) (see AH=59h)
  23582. Notes:    unlike AH=3Ch, this function will fail if the specified file exists
  23583.       rather than truncating it; this permits its use in creating semaphore
  23584.       files because it is an atomic "test and set" operation
  23585.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  23586. SeeAlso: AH=3Ch,AH=5Ah
  23587. ----------215C-------------------------------
  23588. INT 21 - DOS 3+ - "FLOCK" - RECORD LOCKING
  23589.     AH = 5Ch
  23590.     AL = subfunction
  23591.         00h lock region of file
  23592.         01h unlock region of file
  23593.     BX = file handle
  23594.     CX:DX = start offset of region within file
  23595.     SI:DI = length of region in bytes
  23596. Return: CF clear if successful
  23597.     CF set on error
  23598.         AX = error code (01h,06h,21h,24h) (see AH=59h)
  23599. Notes:    error returned unless SHARE or network installed
  23600.     an unlock call must specify the same region as some prior lock call
  23601.     locked regions become entirely inaccessible to other processes
  23602.     duplicate handles created with AH=45h or AH=46h inherit locks, but
  23603.       handles inherited by child processes (see AH=4Bh) do not
  23604. SeeAlso: AX=440Bh,AH=BCh,AH=BEh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
  23605. ----------215D00-----------------------------
  23606. INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
  23607.     AX = 5D00h
  23608.     DS:DX -> DOS parameter list (see below)
  23609.     DPL contains all register values for a call to INT 21h
  23610. Return: as appropriate for function being called
  23611. Notes:    does not check AH.  Out of range values will crash the system
  23612.     executes using specified computer ID and process ID
  23613.     sharing delay loops skipped
  23614.     a special sharing mode is enabled
  23615.     wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h)
  23616.     an extra file attribute parameter is enabled for OPEN (AH=3Dh),
  23617.       DELETE (AH=41h), and RENAME (AH=56h)
  23618.     functions which take filenames require canonical names (as returned
  23619.       by AH=60h); this is apparently to prevent multi-hop file forwarding
  23620. SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
  23621.  
  23622. Format of DOS parameter list:
  23623. Offset    Size    Description
  23624.  00h    WORD    AX 
  23625.  02h    WORD    BX
  23626.  04h    WORD    CX
  23627.  06h    WORD    DX
  23628.  08h    WORD    SI
  23629.  0Ah    WORD    DI
  23630.  0Ch    WORD    DS
  23631.  0Eh    WORD    ES
  23632.  10h    WORD    reserved (0)
  23633.  12h    WORD    computer ID (0 = current system)
  23634.  14h    WORD    process ID (PSP segment on specified computer)
  23635. ----------215D01-----------------------------
  23636. INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
  23637.     AX = 5D01h
  23638.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  23639.         process ID fields used
  23640. Return: CF set on error
  23641.         AX = error code (see AH=59h)
  23642.     CF clear if successful
  23643. Notes:    flushes buffers and updates directory entries for each file which has
  23644.       been written to; if remote file, calls INT 2F/AX=1107h
  23645.     the computer ID and process ID are stored but ignored under DOS 3.3
  23646. SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
  23647. ----------215D02-----------------------------
  23648. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
  23649.     AX = 5D02h
  23650.     DS:DX -> DOS parameter list (see AX=5D00h), only fields DX, DS,
  23651.         computer ID, and process ID used
  23652.     DPL's DS:DX -> ASCIZ name of file to close
  23653. Return: CF set on error
  23654.         AX = error code (see AH=59h)
  23655.     CF clear if successful
  23656. Notes:    error unless SHARE is loaded (calls [SysFileTable-28h]) (see AH=52h)
  23657.     name must be canonical fully-qualified, such as returned by AH=60h
  23658. SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
  23659. ----------215D03-----------------------------
  23660. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
  23661.     AX = 5D03h
  23662.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID used
  23663. Return: CF set on error
  23664.         AX = error code (see AH=59h)
  23665.     CF clear if successful
  23666. Note:    error unless SHARE is loaded (calls [SysFileTable-30h]) (see AH=52h)
  23667. SeeAlso: AX=5D02h,AX=5D04h
  23668. ----------215D04-----------------------------
  23669. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
  23670.     AX = 5D04h
  23671.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  23672.         process ID fields used
  23673. Return: CF set on error
  23674.         AX = error code (see AH=59h)
  23675.     CF clear if successful
  23676. Note:    error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see AH=52h)
  23677. SeeAlso: AX=5D02h,AX=5D03h,INT 2F/AX=111Dh
  23678. ----------215D05-----------------------------
  23679. INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
  23680.     AX = 5D05h
  23681.     DS:DX -> DOS parameter list (see AX=5D00h)
  23682.     DPL's BX = index of sharing record (see AH=52h)
  23683.     DPL's CX = index of SFT in sharing record's SFT list
  23684. Return: CF clear if successful
  23685.         ES:DI -> ASCIZ filename
  23686.         BX = network machine number of SFT's owner
  23687.         CX = number of locks held by SFT's owner
  23688.     CF set if either index out of range
  23689.         AX = 0012h (no more files)
  23690. Notes:    error unless SHARE is loaded (calls [SysFileTable-18h]) (see AH=52h)
  23691.     names are always canonical fully-qualified, such as returned by AH=60h
  23692. SeeAlso: AH=5Ch,AH=60h 
  23693. ----------215D06-----------------------------
  23694. INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
  23695.     AX = 5D06h
  23696. Return: CF set on error
  23697.        AX = error code (see AH=59h)
  23698.     CF clear if successful
  23699.         DS:SI -> nonreentrant data area (includes all three DOS stacks)
  23700.         (critical error flag is first byte)
  23701.         CX = size in bytes of area which must be swapped while in DOS
  23702.         DX = size in bytes of area which must always be swapped
  23703. Notes:    the Critical Error flag is used in conjunction with the InDOS flag
  23704.       (see AH=34h) to determine when it is safe to enter DOS from a TSR
  23705.     setting CritErr flag allows use of functions 50h/51h from INT 28h under
  23706.       DOS 2.x by forcing use of correct stack
  23707.     swapping the data area allows reentering DOS unless DOS is in a
  23708.       critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
  23709.     under DOS 4.0, AX=5D0Bh should be used instead of this function
  23710. SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  23711.  
  23712. Format of DOS 3.10-3.30 Swappable Data Area:
  23713. Offset    Size    Description
  23714.  00h    BYTE    critical error flag
  23715.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  23716.  02h    BYTE    drive on which current critical error occurred, or FFh
  23717.  03h    BYTE    locus of last error
  23718.  04h    WORD    extended error code of last error
  23719.  06h    BYTE    suggested action for last error
  23720.  07h    BYTE    class of last error
  23721.  08h    DWORD    ES:DI pointer for last error
  23722.  0Ch    DWORD    current DTA
  23723.  10h    WORD    current PSP
  23724.  12h    WORD    stores SP across an INT 23
  23725.  14h    WORD    return code from last process termination (zerod after reading
  23726.         with AH=4Dh)
  23727.  16h    BYTE    current drive
  23728.  17h    BYTE    extended break flag
  23729. ---remainder need only be swapped if in DOS---
  23730.  18h    WORD    value of AX on call to INT 21
  23731.  1Ah    WORD    PSP segment for sharing/network
  23732.  1Ch    WORD    network machine number for sharing/network (0000h = us)
  23733.  1Eh    WORD    first usable memory block found when allocating memory
  23734.  20h    WORD    best usable memory block found when allocating memory
  23735.  22h    WORD    last usable memory block found when allocating memory
  23736.  24h    WORD    memory size in paragraphs (used only during initialization)
  23737.  26h    WORD    ???
  23738.  28h    BYTE    INT 24 returned Fail
  23739.  29h    BYTE    bit flags for allowable actions on INT 24
  23740.  2Ah    BYTE    ??? flag
  23741.  2Bh    BYTE    FFh if Ctrl-Break termination, 00h otherwise
  23742.  2Ch    BYTE    ??? flag of some kind
  23743.  2Dh    BYTE    ??? (doesn't seem to be referenced)
  23744.  2Eh    BYTE    day of month
  23745.  2Fh    BYTE    month
  23746.  30h    WORD    year - 1980
  23747.  32h    WORD    number of days since 1-1-1980
  23748.  34h    BYTE    day of week (0 = Sunday)
  23749.  35h    BYTE    working SFT pointer at SDA+2AAh is valid ???
  23750.  36h    BYTE    safe to call INT 28 if nonzero
  23751.  37h    BYTE    flag: if nonzero, INT 24 abort turned into INT 24 fail
  23752.         (set only during process termination)
  23753.  38h 26 BYTEs    device driver request header (see INT 2F/AX=0802h)
  23754.  52h    DWORD    pointer to device driver entry point (used in calling driver)
  23755.  56h 22 BYTEs    device driver request header
  23756.  6Ch 22 BYTEs    device driver request header
  23757.  82h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  23758.  83h    BYTE    ??? apparently not referenced by kernel
  23759.  84h  3 BYTEs    24-bit user number (see AH=30h)
  23760.  87h    BYTE    OEM number (see AH=30h)
  23761.  88h  2 BYTEs    ???
  23762.  8Ah  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  23763.  90h    BYTE    ??? buffer for single-byte I/O functions
  23764.  91h    BYTE    ??? apparently not referenced by kernel
  23765.  92h 128 BYTEs    buffer for filename
  23766. 112h 128 BYTEs    buffer for filename
  23767. 192h 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  23768. 1A7h 32 BYTEs    directory entry for found file
  23769. 1C7h 81 BYTEs    copy of current directory structure for drive being accessed
  23770. 218h 11 BYTEs    FCB-format filename for device name comparison
  23771. 223h    BYTE    unused???
  23772. 224h 11 BYTEs    wildcard destination specification for rename (FCB format)
  23773. 22Fh  2 BYTEs    ???
  23774. 231h    WORD    ???
  23775. 233h  5 BYTEs    ???
  23776. 238h    BYTE    extended FCB file attribute
  23777. 239h    BYTE    type of FCB (00h regular, FFh extended)
  23778. 23Ah    BYTE    directory search attributes
  23779. 23Bh    BYTE    file open mode???
  23780. 23Ch    BYTE    ??? flag bits 0 and 4
  23781. 23Dh    BYTE    ??? flag or counter
  23782. 23Eh    BYTE    ??? flag
  23783. 23Fh    BYTE    flag indicating how DOS function was invoked
  23784.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  23785. 240h    BYTE    ???
  23786. 241h    BYTE    ??? flag
  23787. 242h    BYTE    flag: 00h if read, 01h if write
  23788. 243h    BYTE    drive number for ???
  23789. 244h    BYTE    ???
  23790. 245h    BYTE    ??? flag or counter
  23791. 246h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  23792. 247h    BYTE    canonicalized filename referred to existing file/dir if FFh
  23793. 248h    BYTE    ??? flag or counter
  23794. 249h    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  23795. 24Ah    BYTE    ??? flag
  23796. 24Bh    BYTE    value with which to replace first byte of deleted file's name
  23797.         (normally E5h, but 00h as described under INT 21/AH=13h)
  23798. 24Ch    DWORD    pointer to Drive Parameter Block for critical error invocation
  23799. 250h    DWORD    pointer to stack frame containing user registers on INT 21
  23800. 254h    WORD    stores SP across INT 24
  23801. 256h    DWORD    pointer to DOS Drive Parameter Block for ???
  23802. 25Ah    WORD    ???
  23803. 25Ch    WORD    ??? temp
  23804. 25Eh    WORD    ??? flag (only low byte referenced)
  23805. 260h    WORD    ??? temp
  23806. 262h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  23807. 263h    BYTE    ??? (doesn't seem to be referenced)
  23808. 264h    DWORD    pointer to device header
  23809. 268h    DWORD    pointer to current SFT
  23810. 26Ch    DWORD    pointer to current directory structure for drive being accessed
  23811. 270h    DWORD    pointer to caller's FCB
  23812. 274h    WORD    number of SFT to which file being opened will refer
  23813. 276h    WORD    temporary storage for file handle
  23814. 278h    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  23815. 27Ch    WORD    offset in DOS DS of first filename argument
  23816. 27Eh    WORD    offset in DOS DS of second filename argument
  23817. 280h    WORD    offset of last component in pathname or FFFFh
  23818. 282h    WORD    ??? offset of transfer address???
  23819. 284h    WORD    ??? relative cluster within file being accessed ???
  23820. 286h    WORD    ??? absolute cluster number being accessed ???
  23821. 288h    WORD    ??? current sector number
  23822. 28Ah    WORD    ??? current cluster number
  23823. 28Ch    WORD    ??? current offset in file DIV bytes per sector
  23824. 28Eh  2 BYTEs    ??? 
  23825. 290h    WORD    ??? current offset in file MOD bytes per sector
  23826. 292h    DWORD    current offset in file
  23827. 296h    WORD    ???
  23828. 298h    WORD    ???
  23829. 29Ah    WORD    ???
  23830. 29Ch    WORD    ???
  23831. 29Eh    WORD    ???
  23832. 2A0h    WORD    ???
  23833. 2A2h    DWORD    number of bytes appended to file
  23834. 2A6h    DWORD    pointer to ??? disk buffer
  23835. 2AAh    DWORD    pointer to working SFT
  23836. 2AEh    WORD    used by INT 21 dispatcher to store caller's BX
  23837. 2B0h    WORD    used by INT 21 dispatcher to store caller's DS
  23838. 2B2h    WORD    temporary storage while saving/restoring caller's registers
  23839. 2B4h    DWORD    pointer to prev call frame (offset 250h) if INT 21 reentered
  23840.         also switched to for duration of INT 24
  23841. 2B8h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  23842.         (see AH=4Eh)
  23843. 2CDh 32 BYTEs    directory entry for file being renamed
  23844. 2EDh 331 BYTEs    critical error stack
  23845.    403h     35 BYTEs scratch SFT
  23846. 438h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  23847. 5B8h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  23848. ---DOS 3.2,3.3 only---
  23849. 738h    BYTE    device driver lookahead flag (see AH=64h)
  23850. 739h    BYTE    ??? looks like a drive number
  23851. 73Ah    BYTE    ??? flag of some kind
  23852. 73Ah    BYTE    ???
  23853. ----------215D07-----------------------------
  23854. INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
  23855.     AX = 5D07h
  23856. Return: DL = mode
  23857.         00h redirected output is combined
  23858.         01h redirected output in separate print jobs
  23859. SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
  23860. ----------215D08-----------------------------
  23861. INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
  23862.     AX = 5D08h
  23863.     DL = mode
  23864.         00h redirected output is combined
  23865.         01h redirected output placed in separate jobs, start new print job
  23866.         now
  23867. SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
  23868. ----------215D09-----------------------------
  23869. INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
  23870.     AX = 5D09h
  23871. Note:    forces redirected printer output to be printed, and starts a new print
  23872.       job
  23873. SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
  23874. ----------215D0A-----------------------------
  23875. INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
  23876.     AX = 5D0Ah
  23877.     DS:DX -> 11-word DOS parameter list (see AX=5D00h)
  23878. Return: nothing.  next call to AH=59h will return values from fields AX,BX,CX,
  23879.       DX,DI, and ES in corresponding registers
  23880. Note:    documented for DOS 5+, but undocumented in earlier versions
  23881. SeeAlso: AH=59h
  23882. ----------215D0B-----------------------------
  23883. INT 21 U - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
  23884.     AX = 5D0Bh
  23885. Return: CF set on error
  23886.         AX = error code (see AH=59h)
  23887.     CF clear if successful
  23888.         DS:SI -> swappable data area list (see below)
  23889. Note:    copying and restoring the swappable data areas allows DOS to be
  23890.       reentered unless it is in a critical section delimited by calls to
  23891.       INT 2A/AH=80h and INT 2A/AH=81h,82h
  23892. SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  23893.  
  23894. Format of DOS 4.x swappable data area list:
  23895. Offset    Size    Description
  23896.  00h    WORD    count of data areas
  23897.  02h  N BYTEs    "count" copies of data area record
  23898.         Offset    Size    Description
  23899.          00h    DWORD    address
  23900.          04h    WORD    length and type
  23901.                 bit 15 set if swap always, clear if swap in DOS
  23902.                 bits 14-0: length in bytes
  23903.  
  23904. Format of DOS 4.0-5.0 swappable data area:
  23905. Offset    Size    Description
  23906.  00h    BYTE    critical error flag
  23907.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  23908.  02h    BYTE    drive on which current critical error occurred or FFh
  23909.  03h    BYTE    locus of last error
  23910.  04h    WORD    extended error code of last error
  23911.  06h    BYTE    suggested action for last error
  23912.  07h    BYTE    class of last error
  23913.  08h    DWORD    ES:DI pointer for last error
  23914.  0Ch    DWORD    current DTA
  23915.  10h    WORD    current PSP
  23916.  12h    WORD    stores SP across an INT 23
  23917.  14h    WORD    return code from last process termination (zerod after reading
  23918.         with AH=4Dh)
  23919.  16h    BYTE    current drive
  23920.  17h    BYTE    extended break flag
  23921.  18h  2 BYTEs    ???
  23922. ---remainder need only be swapped if in DOS---
  23923.  1Ah    WORD    value of AX on call to INT 21
  23924.  1Ch    WORD    PSP segment for sharing/network
  23925.  1Eh    WORD    network machine number for sharing/network (0000h = us)
  23926.  20h    WORD    first usable memory block found when allocating memory
  23927.  22h    WORD    best usable memory block found when allocating memory
  23928.  24h    WORD    last usable memory block found when allocating memory
  23929.  26h    WORD    memory size in paragraphs (used only during initialization)
  23930.  28h    WORD    ???
  23931.  2Ah    BYTE    ???
  23932.  2Bh    BYTE    ???
  23933.  2Ch    BYTE    ???
  23934.  2Dh    BYTE    ???
  23935.  2Eh    BYTE    ???
  23936.  2Fh    BYTE    ??? (doesn't seem to be referenced)
  23937.  30h    BYTE    day of month
  23938.  31h    BYTE    month
  23939.  32h    WORD    year - 1980
  23940.  34h    WORD    number of days since 1-1-1980
  23941.  36h    BYTE    day of week (0 = Sunday)
  23942.  37h    BYTE    ???
  23943.  38h    BYTE    ???
  23944.  39h    BYTE    ???
  23945.  3Ah 30 BYTEs    device driver request header (see INT 2F/AX=0802h)
  23946.  58h    DWORD    pointer to device driver entry point (used in calling driver)
  23947.  5Ch 22 BYTEs    device driver request header
  23948.  72h 30 BYTEs    device driver request header
  23949.  90h  6    BYTEs    ???
  23950.  96h  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  23951.  9Ch  2 BYTEs    ???
  23952.  9Eh 128 BYTEs    buffer for filename
  23953. 11Eh 128 BYTEs    buffer for filename
  23954. 19Eh 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  23955. 1B3h 32 BYTEs    directory entry for found file
  23956. 1D3h 88 BYTEs    copy of current directory structure for drive being accessed
  23957. 22Bh 11 BYTEs    FCB-format filename for device name comparison
  23958. 236h    BYTE    ???
  23959. 237h 11 BYTEs    wildcard destination specification for rename (FCB format)
  23960. 242h  2 BYTEs    ???
  23961. 244h    WORD    ???
  23962. 246h  5 BYTEs    ???
  23963. 24Bh    BYTE    extended FCB file attributes
  23964. 24Ch    BYTE    type of FCB (00h regular, FFh extended)
  23965. 24Dh    BYTE    directory search attributes
  23966. 24Eh    BYTE    file open mode
  23967. 24Fh    BYTE    ??? flag bits
  23968. 250h    BYTE    ??? flag or counter
  23969. 251h    BYTE    ??? flag
  23970. 252h    BYTE    flag indicating how DOS function was invoked
  23971.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  23972. 253h    BYTE    ???
  23973. 254h    BYTE    ???
  23974. 255h    BYTE    ???
  23975. 256h    BYTE    ???
  23976. 257h    BYTE    ???
  23977. 258h    BYTE    ???
  23978. 259h    BYTE    ???
  23979. 25Ah    BYTE    canonicalized filename referred to existing file/dir if FFh
  23980. 25Bh    BYTE    ???
  23981. 25Ch    BYTE    type of process termination (00h-03h)
  23982. 25Dh    BYTE    ???
  23983. 25Eh    BYTE    ???
  23984. 25Fh    BYTE    ???
  23985. 260h    DWORD    pointer to Drive Parameter Block for critical error invocation
  23986. 264h    DWORD    pointer to stack frame containing user registers on INT 21
  23987. 268h    WORD    stores SP???
  23988. 26Ah    DWORD    pointer to DOS Drive Parameter Block for ???
  23989. 26Eh    WORD    segment of disk buffer
  23990. 270h    WORD    ???
  23991. 272h    WORD    ???
  23992. 274h    WORD    ???
  23993. 276h    WORD    ???
  23994. 278h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  23995. 279h    BYTE    ??? (doesn't seem to be referenced)
  23996. 27Ah    DWORD    pointer to ???
  23997. 27Eh    DWORD    pointer to current SFT
  23998. 282h    DWORD    pointer to current directory structure for drive being accessed
  23999. 286h    DWORD    pointer to caller's FCB
  24000. 28Ah    WORD    SFT index to which file being opened will refer
  24001. 28Ch    WORD    temporary storage for file handle
  24002. 28Eh    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  24003. 292h    WORD    offset in DOS DS of first filename argument
  24004. 294h    WORD    offset in DOS DS of second filename argument
  24005. 296h    WORD    ???
  24006. 298h    WORD    ???
  24007. 29Ah    WORD    ???
  24008. 29Ch    WORD    ???
  24009. 29Eh    WORD    ???
  24010. 2A0h    WORD    ???
  24011. 2A2h    WORD    ??? directory cluster number???
  24012. 2A4h    DWORD    ???
  24013. 2A8h    DWORD    ???
  24014. 2ACh    WORD    ???
  24015. 2AEh    DWORD    offset in file???
  24016. 2B2h    WORD    ???
  24017. 2B4h    WORD    bytes in partial sector
  24018. 2B6h    WORD    number of sectors
  24019. 2B8h    WORD    ???
  24020. 2BAh    WORD    ???
  24021. 2BCh    WORD    ???
  24022. 2BEh    DWORD    number of bytes appended to file
  24023. 2C2h    DWORD    pointer to ??? disk buffer
  24024. 2C6h    DWORD    pointer to ??? SFT
  24025. 2CAh    WORD    used by INT 21 dispatcher to store caller's BX
  24026. 2CCh    WORD    used by INT 21 dispatcher to store caller's DS
  24027. 2CEh    WORD    temporary storage while saving/restoring caller's registers
  24028. 2D0h    DWORD    pointer to prev call frame (offset 264h) if INT 21 reentered
  24029.         also switched to for duration of INT 24
  24030. 2D4h    WORD    open mode/action for INT 21/AX=6C00h
  24031. 2D6h    BYTE    ??? (set to 00h by INT 21h dispatcher, 02h when a read is
  24032.         performed, and 01h or 03h by INT 21/AX=6C00h)
  24033. 2D7h    WORD    ??? apparently unused
  24034. 2D9h    DWORD    stored ES:DI for AX=6C00h
  24035. 2DDh    WORD    extended file open action code (see AX=6C00h)
  24036. 2DFh    WORD    extended file open attributes (see AX=6C00h)
  24037. 2E1h    WORD    extended file open file mode (see AX=6C00h)
  24038. 2E3h    DWORD    pointer to filename to open (see AX=6C00h)
  24039. 2E7h    WORD    ???
  24040. 2E9h    WORD    ???
  24041. 2EBh    BYTE    ???
  24042. 2ECh    WORD    stores DS during call to [List-of-Lists + 37h]
  24043. 2EEh    WORD    ???
  24044. 2F0h    BYTE    ???
  24045. 2F1h    WORD    ??? bit flags
  24046. 2F3h    DWORD    pointer to user-supplied filename
  24047. 2F7h    DWORD    pointer to ???
  24048. 2FBh    WORD    stores SS during call to [List-of-Lists + 37h]
  24049. 2FDh    WORD    stores SP during call to [List-of-Lists + 37h]
  24050. 2FFh    BYTE    flag, nonzero if stack switched in calling [List-of-Lists+37h]
  24051. 300h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  24052.         (see AH=4Eh)
  24053. 315h 32 BYTEs    directory entry for file being renamed
  24054. 335h 331 BYTEs    critical error stack
  24055. 480h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  24056. 600h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  24057. 780h    BYTE    device driver lookahead flag (see AH=64h)
  24058. 781h    BYTE    ??? looks like a drive number
  24059. 782h    BYTE    ??? flag of some kind
  24060. 783h    BYTE    ???
  24061. 784h    WORD    ???
  24062. 786h    WORD    ???
  24063. 788h    WORD    ???
  24064. 78Ah    WORD    ???
  24065. ----------215E00-----------------------------
  24066. INT 21 - DOS 3.1+ network - GET MACHINE NAME
  24067.     AX = 5E00h
  24068.     DS:DX -> 16-byte buffer for ASCIZ machine name
  24069. Return: CF clear if successful
  24070.         CH = validity
  24071.         00h name invalid
  24072.         nonzero valid
  24073.             CL = NetBIOS number for machine name
  24074.             DS:DX buffer filled with blank-paded name
  24075.     CF set on error
  24076.         AX = error code (01h) (see AH=59h)
  24077. Note:    supported by OS/2 v1.3+ compatibility box, PC-NFS
  24078. SeeAlso: AX=5E01h
  24079. ----------215E01CH00-------------------------
  24080. INT 21 - DOS 3.1+ network - SET MACHINE NAME
  24081.     AX = 5E01h
  24082.     CH = 00h undefine name (make it invalid)
  24083.        <> 0     define name
  24084.     CL = name number
  24085.     DS:DX -> 15-character blank-padded ASCIZ name
  24086. SeeAlso: AX=5E00h
  24087. ----------215E02-----------------------------
  24088. INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
  24089.     AX = 5E02h
  24090.     BX = redirection list index (see AX=5F02h)
  24091.     CX = length of setup string
  24092.     DS:SI -> setup string
  24093. Return: CF clear if successful
  24094.     CF set on error
  24095.         AX = error code (01h) (see AH=59h)
  24096. SeeAlso: AX=5E03h,INT 2F/AX=111Fh
  24097. ----------215E03-----------------------------
  24098. INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
  24099.     AX = 5E03h
  24100.     BX = redirection list index (see AX=5F02h)
  24101.     ES:DI -> 64-byte buffer for setup string
  24102. Return: CF clear if successful
  24103.         CX = length of setup string
  24104.         ES:DI buffer filled
  24105.     CF set on error
  24106.         AX = error code (01h) (see AH=59h)
  24107. SeeAlso: AX=5E02h,INT 2F/AX=111Fh
  24108. ----------215E04-----------------------------
  24109. INT 21 - DOS 3.1+ network - SET PRINTER MODE
  24110.     AX = 5E04h
  24111.     BX = redirection list index (see AX=5F02h)
  24112.     DX = mode
  24113.         bit 0: set if binary, clear if text (tabs expanded to blanks)
  24114. Return: CF set on error
  24115.         AX = error code (see AH=59h)
  24116.     CF clear if successful
  24117. Note:    calls INT 2F/AX=111Fh with 5E04h on stack
  24118. SeeAlso: AX=5E05h,INT 2F/AX=111Fh
  24119. ----------215E05-----------------------------
  24120. INT 21 - DOS 3.1+ network - GET PRINTER MODE
  24121.     AX = 5E05h
  24122.     BX = redirection list index (see AX=5F02h)
  24123. Return: CF set on error
  24124.         AX = error code (see AH=59h)
  24125.     CF clear if successful
  24126.         DX = printer mode (see AX=5E04h)
  24127. Note:    calls INT 2F/AX=111Fh with 5E05h on stack
  24128. SeeAlso: AX=5E04h,INT 2F/AX=111Fh
  24129. ----------215F00-----------------------------
  24130. INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
  24131.     AX = 5F00h
  24132.     BL = redirection type
  24133.         03h printer
  24134.         04h disk drive
  24135. Return: CF set on error
  24136.         AX = error code (see AH=59h)
  24137.     CF clear if successful
  24138.         BH = redirection state
  24139.         00h off
  24140.         01h on
  24141. Note:    calls INT 2F/AX=111Eh with AX on top of the stack
  24142. SeeAlso: AX=5F01h,INT 2F/AX=111Eh
  24143. ----------215F01-----------------------------
  24144. INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
  24145.     AX = 5F01h
  24146.     BL = redirection type
  24147.         03h printer
  24148.         04h disk drive
  24149.     BH = redirection state
  24150.         00h off
  24151.         01h on
  24152. Return: CF set on error
  24153.         AX = error code (see AH=59h)
  24154.     CF clear if successful
  24155. Notes:    when redirection is off, the local device (if any) rather than the
  24156.       remote device is used
  24157.     calls INT 2F/AX=111Eh with AX on top of the stack
  24158. SeeAlso: AX=5F00h,INT 2F/AX=111Eh
  24159. ----------215F02-----------------------------
  24160. INT 21 - DOS 3.1+ network, Banyan VINES, PC-NFS - GET REDIRECTION LIST ENTRY
  24161.     AX = 5F02h
  24162.     BX = redirection list index
  24163.     CX = 0000h (LANtastic)
  24164.     DS:SI -> 16-byte buffer for ASCIZ device name
  24165.     ES:DI -> 128-byte buffer for ASCIZ network name
  24166. Return: CF clear if successful
  24167.         BH = device status
  24168.         00h valid
  24169.         01h invalid
  24170.         BL = device type
  24171.         03h printer
  24172.         04h disk drive
  24173.         CX = user data previously set with AX=5F03h
  24174.         DS:SI and ES:DI buffers filled
  24175.         DX,BP destroyed
  24176.     CF set on error
  24177.         AX = error code (01h,12h) (see AH=59h)
  24178. Notes:    this function is passed through to INT 2F/AX=111Eh
  24179.     error code 12h is returned if BX is greater than the size of the list
  24180.     also supported by Banyan VINES, PC-NFS, and LANtastic
  24181. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  24182. ----------215F03-----------------------------
  24183. INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - REDIRECT DEVICE
  24184.     AX = 5F03h
  24185.     BL = device type
  24186.         03h printer
  24187.         04h disk drive
  24188.     CX = user data to save
  24189.         0000h for LANtastic
  24190.     DS:SI -> ASCIZ local device name (16 bytes max)
  24191.     ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
  24192. Return: CF clear if successful
  24193.     CF set on error
  24194.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  24195. Notes:    if device type is disk drive, DS:SI must point at either a null string
  24196.       or a string consisting the drive letter followed by a colon; if a
  24197.       null string, the network attempts to access the destination without
  24198.       redirecting a local drive
  24199.     calls INT 2F/AX=111Eh with AX on top of the stack
  24200. SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh
  24201. ----------215F04-----------------------------
  24202. INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - CANCEL REDIRECTION
  24203.     AX = 5F04h
  24204.     DS:SI -> ASCIZ device name or path
  24205. Return: CF clear if successful
  24206.     CF set on error
  24207.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  24208. Notes:    the DS:SI string must be either a local device name, a drive letter
  24209.       followed by a colon, or a network directory beginning with two
  24210.       backslashes
  24211.     calls INT 2F/AX=111Eh with AX on top of the stack
  24212. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  24213. ----------215F05-----------------------------
  24214. INT 21 - DOS 4.x + Microsoft Networks - GET REDIRECTION LIST EXTENDED ENTRY
  24215.     AX = 5F05h
  24216.     BX = redirection list index
  24217.     DS:SI -> buffer for ASCIZ source device name
  24218.     ES:DI -> buffer for destination ASCIZ network path
  24219. Return: CF set on error
  24220.         AX = error code (see AH=59h)
  24221.     CF clear if successful
  24222.         BH = device status flag (bit 0 clear if valid)
  24223.         BL = device type (03h if printer, 04h if drive)
  24224.         CX = stored parameter value (user data)
  24225.         BP = NETBIOS local session number
  24226.         DS:SI buffer filled
  24227.         ES:DI buffer filled
  24228. Notes:    the local session number allows sharing the redirector's session number
  24229.     if an error is caused on the NETBIOS LSN, the redirector may be unable
  24230.       to correctly recover from errors
  24231.     calls INT 2F/AX=111Eh with AX on top of the stack
  24232. SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
  24233. ----------215F05-----------------------------
  24234. INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
  24235.     AX = 5F05h
  24236.     DL = drive number (0=A:)
  24237.     DS:SI -> ASCIZ name of the object to map the drive to
  24238. Return: CF set on error
  24239.         AX = error code (see AH=59h)
  24240.     CF clear if successful
  24241. SeeAlso: AX=5F06h"STARLITE"
  24242. ----------215F06-----------------------------
  24243. INT 21 U - Network - GET REDIRECTION LIST???
  24244.     AX = 5F06h
  24245.     ???
  24246. Return: ???
  24247. Notes:    appears to be similar to AX=5F02h and AX=5F05h
  24248.     calls INT 2F/AX=111Eh with AX on top of the stack
  24249. SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
  24250. ----------215F06-----------------------------
  24251. INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
  24252.     AX = 5F06h
  24253.     DL = drive to be unmapped (0=A:)
  24254. Return: CF set on error
  24255.         AX = error code (see AH=59h)
  24256.     CF clear if successful
  24257. SeeAlso: AX=5F05h"STARLITE"
  24258. ----------215F07-----------------------------
  24259. INT 21 - DOS 5.0 - ENABLE DRIVE
  24260.     AX = 5F07h
  24261.     DL = drive number (0=A:)
  24262. Return: CF clear if successful
  24263.     CF set on error
  24264.         AX = error code (0Fh) (see AH=59h)
  24265. Note:    simply sets the "valid" bit in the drive's CDS
  24266. SeeAlso: AH=52h,AX=5F08h"DOS"
  24267. ----------215F07-----------------------------
  24268. INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
  24269.     AX = 5F07h
  24270.     DS:SI -> ASCIZ name of object to offer to network
  24271.     ES:DI -> ASCIZ name under which object will be known on the network
  24272.         MUST begin with three slashes
  24273. Return: CF set on error
  24274.         AX = error code (see AH=59h)
  24275.     CF clear if successful
  24276. SeeAlso: AX=5F08h"STARLITE"
  24277. ----------215F08-----------------------------
  24278. INT 21 - DOS 5.0 - DISABLE DRIVE
  24279.     AX = 5F08h
  24280.     DL = drive number (0=A:)
  24281. Return: CF clear if successful
  24282.     CF set on error
  24283.         AX = error code (0Fh) (see AH=59h)
  24284. Note:    simply clears the "valid" bit in the drive's CDS
  24285. SeeAlso: AH=52h,AX=5F07h"DOS"
  24286. ----------215F08-----------------------------
  24287. INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
  24288.     AX = 5F08h
  24289.     DS:SI -> ASCIZ network name (not local name) of object to unshare
  24290. Return: CF set on error
  24291.         AX = error code (see AH=59h)
  24292.     CF clear if successful
  24293. SeeAlso: AX=5F07h"STARLITE"
  24294. ----------215F09-----------------------------
  24295. INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
  24296.     AX = 5F09h
  24297.     DS:DX -> ASCIZ name of the device driver to attach to
  24298. Return: CF set on error
  24299.         AX = error code (see AH=59h)
  24300.     CF clear if successful
  24301. Note:    the STARLITE distributed file system can attach to multiple networks
  24302.       simultaneously
  24303. SeeAlso: AX=5F0Ah
  24304. ----------215F0A-----------------------------
  24305. INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
  24306.     AX = 5F0Ah
  24307.     DS:DX -> ASCIZ name of device driver to detach from
  24308. Return: CF set on error
  24309.         AX = error code (see AH=59h)
  24310.     CF clear if successful
  24311. SeeAlso: AX=5F09h
  24312. ----------215F32-----------------------------
  24313. INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPipeInfo
  24314.     AX = 5F32h
  24315.     ???
  24316. Return: ???
  24317. Note:    supported by Novell DOS Named Pipe Extender
  24318. SeeAlso: AX=5F33h,AX=5F34h
  24319. ----------215F33-----------------------------
  24320. INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPHandState
  24321.     AX = 5F33h
  24322.     ???
  24323. Return: ???
  24324. Note:    supported by Novell DOS Named Pipe Extender
  24325. SeeAlso: AX=5F32h,AX=5F34h
  24326. ----------215F34-----------------------------
  24327. INT 21 - LAN Manager Enhanced DOS API local interface - DosSetNmPHandState
  24328.     AX = 5F34h
  24329.     ???
  24330. Return: ???
  24331. Note:    supported by Novell DOS Named Pipe Extender
  24332. SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
  24333. ----------215F35-----------------------------
  24334. INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekNmPipe
  24335.     AX = 5F35h
  24336.     ???
  24337. Note:    supported by Novell DOS Named Pipe Extender
  24338. Return: ???
  24339. SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
  24340. ----------215F36-----------------------------
  24341. INT 21 - LAN Manager Enhanced DOS API local interface - DosTransactNmPipe
  24342.     AX = 5F36h
  24343.     ???
  24344. Return: ???
  24345. Note:    supported by Novell DOS Named Pipe Extender
  24346. SeeAlso: AX=5F34h,AX=5F37h
  24347. ----------215F37-----------------------------
  24348. INT 21 - LAN Manager Enhanced DOS API local interface - DosCallNmPipe
  24349.     AX = 5F37h
  24350.     ???
  24351. Return: ???
  24352. Note:    supported by Novell DOS Named Pipe Extender
  24353. SeeAlso: AX=5F36h,AX=5F38h
  24354. ----------215F38-----------------------------
  24355. INT 21 - LAN Manager Enhanced DOS API local interface - DosWaitNmPipe
  24356.     AX = 5F38h
  24357.     ???
  24358. Return: ???
  24359. Note:    supported by Novell DOS Named Pipe Extender
  24360. SeeAlso: AX=5F37h,AX=5F39h
  24361. ----------215F39-----------------------------
  24362. INT 21 - LAN Manager Enhanced DOS API local interface - DosRawReadNmPipe
  24363.     AX = 5F39h
  24364.     ???
  24365. Return: ???
  24366. Note:    supported by Novell DOS Named Pipe Extender
  24367. SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
  24368. ----------215F3A-----------------------------
  24369. INT 21 - LAN Manager Enhanced DOS API local interface - DosRawWriteNmPipe
  24370.     AX = 5F3Ah
  24371.     ???
  24372. Return: ???
  24373. Note:    supported by Novell DOS Named Pipe Extender
  24374. SeeAlso: AX=5F3Bh,INT 2F/AX=118Fh
  24375. ----------215F3B-----------------------------
  24376. INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleSetInfo
  24377.     AX = 5F3Bh
  24378.     ???
  24379. Return: ???
  24380. SeeAlso: AX=5F3Ch
  24381. ----------215F3C-----------------------------
  24382. INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleGetInfo
  24383.     AX = 5F3Ch
  24384.     ???
  24385. Return: ???
  24386. SeeAlso: AX=5F3Bh
  24387. ----------215F40-----------------------------
  24388. INT 21 - LAN Manager Enhanced DOS API local interface - NetMessageBufferSend
  24389.     AX = 5F40h
  24390.     ???
  24391. Return: ???
  24392. ----------215F42-----------------------------
  24393. INT 21 - LAN Manager Enhanced DOS API local interface - NetServiceControl
  24394.     AX = 5F42h
  24395.     ???
  24396. Return: ???
  24397. ----------215F44-----------------------------
  24398. INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaGetInfo
  24399.     AX = 5F44h
  24400.     ???
  24401. Return: ???
  24402. SeeAlso: AX=5F45h,AX=5F49h
  24403. ----------215F45-----------------------------
  24404. INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaSetInfo
  24405.     AX = 5F45h
  24406.     ???
  24407. Return: ???
  24408. SeeAlso: AX=5F44h
  24409. ----------215F46-----------------------------
  24410. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseEnum
  24411.     AX = 5F46h
  24412.     ???
  24413. Return: ???
  24414. SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch
  24415. ----------215F47-----------------------------
  24416. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseAdd
  24417.     AX = 5F47h
  24418.     ???
  24419. Return: ???
  24420. SeeAlso: AX=5F46h,AX=5F48h
  24421. ----------215F48-----------------------------
  24422. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseDel
  24423.     AX = 5F48h
  24424.     ???
  24425. Return: ???
  24426. SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
  24427. ----------215F49-----------------------------
  24428. INT 21 - LAN Manager Enhanced DOS API local interface - NetUseGetInfo
  24429.     AX = 5F49h
  24430.     ???
  24431. Return: ???
  24432. SeeAlso: AX=5F44h,AX=5F47h
  24433. ----------215F4A-----------------------------
  24434. INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteCopy
  24435.     AX = 5F4Ah
  24436.     ???
  24437. Return: ???
  24438. SeeAlso: AX=5F4Bh
  24439. ----------215F4B-----------------------------
  24440. INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteMove
  24441.     AX = 5F4Bh
  24442.     ???
  24443. Return: ???
  24444. SeeAlso: AX=5F4Ah
  24445. ----------215F4C-----------------------------
  24446. INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum
  24447.     AX = 5F4Ch
  24448.     ???
  24449. Return: ???
  24450. Note:    supported by Novell DOS Named Pipe Extender
  24451. SeeAlso: AX=5F53h
  24452. ----------215F4D-----------------------------
  24453. INT 21 - LAN Manager Enhanced DOS API local interface - DosMakeMailslot
  24454.     AX = 5F4Dh
  24455.     ???
  24456. Return: ???
  24457. SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
  24458. ----------215F4E-----------------------------
  24459. INT 21 - LAN Manager Enhanced DOS API local interface - DosDeleteMailslot
  24460.     AX = 5F4Eh
  24461.     ???
  24462. Return: ???
  24463. SeeAlso: AX=5F4Dh,AX=5F4Fh
  24464. ----------215F4F-----------------------------
  24465. INT 21 - LAN Manager Enhanced DOS API local interface - DosMailslotInfo
  24466.     AX = 5F4Fh
  24467.     ???
  24468. Return: ???
  24469. SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
  24470. ----------215F50-----------------------------
  24471. INT 21 - LAN Manager Enhanced DOS API local interface - DosReadMailslot
  24472.     AX = 5F50h
  24473.     ???
  24474. Return: ???
  24475. SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
  24476. ----------215F51-----------------------------
  24477. INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekMailslot
  24478.     AX = 5F51h
  24479.     ???
  24480. Return: ???
  24481. SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
  24482. ----------215F52-----------------------------
  24483. INT 21 - LAN Manager Enhanced DOS API local interface - DosWriteMailslot
  24484.     AX = 5F52h
  24485.     ???
  24486. Return: ???
  24487. SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h
  24488. ----------215F53-----------------------------
  24489. INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum2
  24490.     AX = 5F53h
  24491.     ???
  24492. Return: ???
  24493. SeeAlso: AX=5F4Ch
  24494. ----------215F80-----------------------------
  24495. INT 21 - LANtastic - GET LOGIN ENTRY
  24496.     AX = 5F80h
  24497.     BX = login entry index (0-based)
  24498.     ES:DI -> 16-byte buffer for machine name
  24499. Return: CF clear if successful
  24500.         buffer filled with machine name ("\\" prefix removed)
  24501.         DL = adapter number (v3+)
  24502.     CF set on error
  24503.         AX = error code
  24504. Note:    the login entry index corresponds to the value BX used in AX=5F83h
  24505. SeeAlso: AX=5F83h
  24506. ----------215F81-----------------------------
  24507. INT 21 - LANtastic - LOGIN TO SERVER
  24508.     AX = 5F81h
  24509.     ES:DI -> ASCIZ login path followed immediately by ASCIZ password
  24510.     BL = adapter number
  24511.         FFh try all valid adapters
  24512.         00h-07h try only specified adapter
  24513. Return: CF clear if successful
  24514.     CF set on error
  24515.         AX = error code
  24516. Notes:    login path is of form "\\machine\username"
  24517.     if no password is used, the string at ES:DI must be terminated with
  24518.       three NULs for compatibility with LANtastic v3.0.
  24519. SeeAlso: AX=5F82h,AX=5F84h
  24520. ----------215F82-----------------------------
  24521. INT 21 - LANtastic - LOGOUT FROM SERVER
  24522.     AX = 5F82h
  24523.     ES:DI -> ASCIZ server name (in form "\\machine")
  24524. Return: CF clear if successful
  24525.     CF set on error
  24526.         AX = error code
  24527. SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh
  24528. ----------215F83-----------------------------
  24529. INT 21 - LANtastic - GET USERNAME ENTRY
  24530.     AX = 5F83h
  24531.     BX = login entry index (0-based)
  24532.     ES:DI -> 16-byte buffer for username currently logged into
  24533. Return: CF clear if successful
  24534.         DL = adapter number (v3+)
  24535.     CF set on error
  24536.         AX = error code
  24537. Note:    the login entry index corresponds to the value BX used in AX=5F80h
  24538. SeeAlso: AX=5F80h
  24539. ----------215F84-----------------------------
  24540. INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
  24541.     AX = 5F84h
  24542.     BX = server index not currently logged into
  24543.     ES:DI -> 16-byte buffer for server name which is available for logging
  24544.         in to ("\\" prefix omitted)
  24545. Return: CF clear if successful
  24546.         DL = adapter number to non-logged in server is on
  24547.     CF set on error
  24548.         AX = error code
  24549. SeeAlso: AX=5F81h
  24550. ----------215F85-----------------------------
  24551. INT 21 - LANtastic - CHANGE PASSWORD
  24552.     AX = 5F85h
  24553.     ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
  24554. Return: CF clear if successful
  24555.     CF set on error
  24556.         AX = error code
  24557. Notes:    must be logged into the named machine
  24558.     this function is illegal for group accounts
  24559. ----------215F86-----------------------------
  24560. INT 21 - LANtastic - DISABLE ACCOUNT
  24561.     AX = 5F86h
  24562.     ES:DI -> ASCIZ machine name and password in form "\\machine\password"
  24563. Return: CF clear if successful
  24564.     CF set on error
  24565.         AX = error code
  24566. Note:    must be logged into the named machine and concurrent logins set to 1
  24567.       by NET_MGR.  Requires system manager to re-enable account.
  24568. ----------215F87-----------------------------
  24569. INT 21 - LANtastic v3+ - GET ACCOUNT
  24570.     AX = 5F87h
  24571.     DS:SI -> 128-byte buffer for account information (see below)
  24572.     ES:DI -> ASCIZ machine name in form "\\machine"
  24573. Return:    CF clear if successful
  24574.     CF set on error
  24575.         AX = error code
  24576.     BX destroyed
  24577. Note:    must be logged into the specified machine
  24578.  
  24579. Format of user account structure:
  24580. Offset    Size    Description
  24581.  00h 16 BYTEs    blank-padded username (zero-padded for v4.x)
  24582.  10h 16 BYTEs    reserved (00h)
  24583.  20h 32 BYTEs    user description
  24584.  40h    BYTE    privilege bits
  24585.         bit 7: bypass access control lists
  24586.             6: bypass queue protection
  24587.             5: treat as local process
  24588.             4: bypass mail protection
  24589.             3: allow audit entry creation
  24590.             2: system manager
  24591.             0: user cannot change password
  24592.  41h    BYTE    maximum concurrent users
  24593.  42h 42 BYTEs    bit map for disallowed half hours, beginning on Sunday
  24594.         (bit set if half-hour not an allowed time)
  24595.  6Ch    WORD    internal (0002h)
  24596.  6Eh  2 WORDs    last login time
  24597.  72h  2 WORDs    account expiration date (MSDOS-format year/month:day)
  24598.  76h  2 WORDs    password expiration date (0 = none)
  24599.  7Ah    BYTE    number of days to extend password after change (1-31)
  24600.         00h if no extension required
  24601. ---v3.x---
  24602.  7Bh  5 BYTEs    reserved
  24603. ---v4.x---
  24604.  7Bh    BYTE    storage for first letter of user name when deleted (first
  24605.         character is changed to 00h when deleting account)
  24606.  7Ch    BYTE    extended privileges
  24607.  7Dh  3 BYTEs    reserved
  24608. ----------215F88-----------------------------
  24609. INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS
  24610.     AX = 5F88h
  24611. Return:    CF clear if successful
  24612.     CF set on error
  24613.         AX = error code
  24614. SeeAlso: AX=5F82h
  24615. ----------215F97-----------------------------
  24616. INT 21 - LANtastic - COPY FILE
  24617.     AX = 5F97h
  24618.     CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
  24619.     SI = source file handle
  24620.     DI = destination file handle
  24621. Return: CF clear if successful
  24622.         DX:AX = number of bytes copied
  24623.     CF set on error
  24624.         AX = error code
  24625. Note:    copy is performed by server
  24626. ----------215F98-----------------------------
  24627. INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
  24628.     AX = 5F98h
  24629.     DS:SI -> message buffer (see below)
  24630. Return: CF clear if successful
  24631.     CF set on error
  24632.         AX = error code
  24633. Note:    v4.1- return no errors
  24634. SeeAlso: AX=5F99h
  24635.  
  24636. Format of message buffer:
  24637. Offset    Size    Description
  24638.  00h    BYTE    reserved
  24639.  01h    BYTE    message type
  24640.         00h general 
  24641.         01h server warning
  24642.         02h-7Fh reserved
  24643.         80h-FFh user-defined
  24644.  02h 16 BYTEs    ASCIZ destination machine name
  24645.  12h 16 BYTEs    ASCIZ server name which user must be logged into
  24646.  22h 16 BYTEs    ASCIZ user name
  24647.  32h 16 BYTEs    ASCIZ originating machine name (filled in when received)
  24648.  42h 80 BYTEs    message text
  24649. ----------215F99-----------------------------
  24650. INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
  24651.     AX = 5F99h
  24652.     ES:DI -> messsage buffer (see AX=5F98h for format)
  24653. Return: CF clear if successful
  24654.     CF set on error
  24655.         AX = error code
  24656. SeeAlso: AX=5F98h
  24657. ----------215F9A-----------------------------
  24658. INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
  24659.     AX = 5F9Ah
  24660. Return: CF clear if successful
  24661.         DL = bits describing processing for received unsolicited messages
  24662.         bit 0: beep before message is delivered
  24663.             1: deliver message to message service
  24664.             2: pop up message automatically (v3+)
  24665.     CF set on error
  24666.         AX = error code
  24667. SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh
  24668. ----------215F9B-----------------------------
  24669. INT 21 - LANtastic - SET MESSAGE PROCESSING FLAG
  24670.     AX = 5F9Bh
  24671.     DL = bits describing processing for received unsolicited messages
  24672.          (see AX=5F9Ah)
  24673. Return: CF clear if successful
  24674.     CF set on error
  24675.         AX = error code
  24676. SeeAlso: AX=5F9Ah,AX=5F9Eh
  24677. ----------215F9C-----------------------------
  24678. INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
  24679.     AX = 5F9Ch
  24680.     CX = time to leave on screen in clock ticks
  24681.     DH = 0-based screen line on which to place message
  24682. Return:    CF clear if successful
  24683.     CF set on error
  24684.         AX = error code (0Bh)
  24685. Notes:    the original screen contents are restored when the message is removed
  24686.     the message will not appear, and an error will be returned, if the
  24687.       screen is in a graphics mode
  24688. SeeAlso: AX=5F9Ah
  24689. ----------215F9D-----------------------------
  24690. INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS
  24691.     AX = 5F9Dh
  24692. Return:    DL = redirector control bits
  24693.         bit 7: set to notify on print job completion
  24694. SeeAlso: AX=5F9Ah,AX=5F9Eh
  24695. ----------215F9E-----------------------------
  24696. INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS
  24697.     AX = 5F9Eh
  24698.     DL = redirector control bits (see AH = 5F9Dh)
  24699. Return: nothing
  24700. SeeAlso: AX=5F9Bh,AX=5F9Dh
  24701. ----------215FA0-----------------------------
  24702. INT 21 - LANtastic - GET QUEUE ENTRY
  24703.     AX = 5FA0h
  24704.     BX = queue entry index (0000h is first entry)
  24705.     DS:SI -> buffer for queue entry (see below)
  24706.     ES:DI -> ASCIZ server name in form "\\name"
  24707. Return: CF clear if successful
  24708.     CF set on error
  24709.         AX = error code
  24710.     BX = entry index for next queue entry (BX-1 is current index)
  24711. SeeAlso: AX=5FA1h,AX=5FA2h
  24712.  
  24713. Format of queue entry:
  24714. Offset    Size    Description
  24715.  00h    BYTE    status of entry
  24716.         00h empty
  24717.         01h being updated
  24718.         02h being held
  24719.         03h waiting for despool
  24720.         04h being despooled
  24721.         05h canceled
  24722.         06h spooled file could not be accessed
  24723.         07h destination could not be accessed
  24724.         08h rush job
  24725.  01h    DWORD    size of spooled file
  24726.  05h    BYTE    type of entry
  24727.         00h printer queue file
  24728.         01h message
  24729.         02h local file
  24730.         03h remote file
  24731.         04h to remote modem
  24732.         05h batch processor file
  24733.  06h    BYTE    output control
  24734.         bit 6: don't delete (for mail)
  24735.         bit 5: mail file contains voice mail (v3+)
  24736.         bit 4: mail message has been read
  24737.         bit 3: response has been requested for this mail
  24738.  07h    WORD    number of copies
  24739.  09h    DWORD    sequence number of queue entry
  24740.  0Dh 48 BYTEs    pathname of spooled file
  24741.  3Dh 16 BYTEs    user who spooled file
  24742.  4Dh 16 BYTEs    name of machine from which file was spooled
  24743.  5Dh    WORD    date file was spooled (see AX=5700h)
  24744.  5Fh    WORD    time file was spooled (see AX=5700h)
  24745.  61h 17 BYTEs    ASCIZ destination device or user name
  24746.  72h 48 BYTEs    comment field
  24747. ----------215FA1-----------------------------
  24748. INT 21 - LANtastic - SET QUEUE ENTRY
  24749.     AX = 5FA1h
  24750.     BX = handle of opened queue entry
  24751.     DS:SI -> queue entry (see AX=5FA0h)
  24752. Return: CF clear if successful
  24753.     CF set on error
  24754.         AX = error code
  24755. Notes:    the only queue entry fields which may be changed are output control,
  24756.       number of copies, destination device, and comment
  24757.     the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh)
  24758.       call on the file "\\server\\@MAIL" or "\\server\@name" (for
  24759.       printer queue entries)
  24760. SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h
  24761. ----------215FA2-----------------------------
  24762. INT 21 - LANtastic - CONTROL QUEUE
  24763.     AX = 5FA2h
  24764.     BL = control command
  24765.         00h start despooling (privileged)
  24766.         01h halt despooling (privileged)
  24767.         02h halt despooling at end of job (privileged)
  24768.         03h pause despooler at end of job (privileged)
  24769.         04h print single job (privileged)
  24770.         05h restart current job (privileged)
  24771.         06h cancel the current job
  24772.         07h hold queue entry
  24773.         08h release a held queue entry
  24774.         09h make queue entry a rushed job (privileged)
  24775.     CX:DX = sequence number to control (commands 06h-09h)
  24776.     DX = physical printer number (commands 00h-05h)
  24777.         00h-02h LPT1-LPT3
  24778.         03h,04h COM1,COM2
  24779.         other    all printers
  24780.     ES:DI -> ASCIZ server name in form "\\machine"
  24781. Return: CF clear if successful
  24782.     CF set on error
  24783.         AX = error code
  24784. ----------215FA3-----------------------------
  24785. INT 21 - LANtastic v3+ - GET PRINTER STATUS
  24786.     AX = 5FA3h
  24787.     BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
  24788.     DS:SI -> buffer for printer status (see below)
  24789.     ES:DI -> ASCIZ server name in form "\\machine"
  24790. Return: CF clear if successful
  24791.     CF set on error
  24792.         AX = error code
  24793.     BX = next physical printer number
  24794. Note:    you must be logged in to the specified server
  24795.  
  24796. Format of printer status:
  24797. Offset    Size    Description
  24798.  00h    BYTE    printer state
  24799.         bit 7: printer paused
  24800.         bits 0-6: 0 printer disabled
  24801.               1 will stop at end of job
  24802.               2 print multiple jobs
  24803.  01h    WORD    queue index of print job being despooled
  24804.         FFFFh if not despooling--ignore all following fields
  24805.  03h    WORD    actual characters per second being output
  24806.  05h    DWORD    number of characters actually output so far
  24807.  09h    DWORD    number of bytes read from spooled file so far
  24808.  0Dh    WORD    copies remaining to print
  24809. ----------215FA4-----------------------------
  24810. INT 21 - LANtastic v3+ - GET STREAM INFO
  24811.     AX = 5FA4h
  24812.     BX = 0-based stream index number
  24813.     DS:SI -> buffer for stream information (see below)
  24814.     ES:DI -> ASCIZ machine name in form "\\machine"
  24815. Return: CF clear if successful
  24816.     CF set on error
  24817.         AX = error code
  24818.     BX = next stream number
  24819. SeeAlso: AX=5FA5h
  24820.  
  24821. Format of stream information:
  24822. Offset    Size    Description
  24823.  00h    BYTE    queueing of jobs for logical printer (0=disabled,other=enabled)
  24824.  01h 11 BYTEs    logical printer resource template (may contain ? wildcards)
  24825. ----------215FA5-----------------------------
  24826. INT 21 - LANtastic v3+ - SET STREAM INFO
  24827.     AX = 5FA5h
  24828.     BX = 0-based stream index number
  24829.     DS:SI -> buffer containing stream information (see AX=5FA4h)
  24830.     ES:DI -> ASCIZ machine name in form "\\machine"
  24831. Return: CF clear if successful
  24832.     CF set on error
  24833.         AX = error code
  24834. SeeAlso: AX=5FA4h
  24835. ----------215FA7-----------------------------
  24836. INT 21 - LANtastic - CREATE USER AUDIT ENTRY
  24837.     AX = 5FA7h
  24838.     DS:DX -> ASCIZ reason code (max 8 bytes)
  24839.     DS:SI -> ASCIZ variable reason string (max 128 bytes)
  24840.     ES:DI -> ASCIZ machine name in form "\\machine"
  24841. Return: CF clear if successful
  24842.     CF set on error
  24843.         AX = error code
  24844. Note:    you must be logged in to the specified server and have the "U"
  24845.       privilege to execute this call
  24846. ----------215FA9-----------------------------
  24847. INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY
  24848.     AX = 5FA9h
  24849.     BX = handle of opened queue entry
  24850.     DS:SI -> queue entry (see AX=5FA0h)
  24851. Return: CF clear if successful
  24852.     CF set on error
  24853.         AX = error code
  24854. Note:    functions exactly the same as AX=5FA1h except the spooled filename is
  24855.       also set.  This call supports    direct despooling.
  24856. SeeAlso: AX=5FA1h
  24857. ----------215FB0-----------------------------
  24858. INT 21 - LANtastic - GET ACTIVE USER INFORMATION
  24859.     AX = 5FB0h
  24860.     BX = server login entry index
  24861.     DS:SI -> buffer for active user entry (see below)
  24862.     ES:DI -> ASCIZ machine name in form "\\server"
  24863. Return: CF clear if successful
  24864.     CF set on error
  24865.         AX = error code
  24866.     BX = next login index
  24867.  
  24868. Format of active user entry:
  24869. Offset    Size    Description
  24870.  00h    WORD    virtual circuit number
  24871.  02h    BYTE    login state
  24872.         bit 0: fully logged in
  24873.             1: remote program load login
  24874.             2: user has system manager privileges
  24875.             3: user can create audit entries
  24876.             4: bypass mail protection
  24877.             5: treat as local process
  24878.             6: bypass queue protection
  24879.             7: bypass access control lists
  24880.  03h    BYTE    last command issued (see below)
  24881.  04h  5 BYTEs    number of I/O bytes (40-bit unsigned number)
  24882.  09h  3 BYTEs    number of server requests (24-bit unsigned)
  24883.  0Ch 16 BYTEs    name of user who is logged in
  24884.  1Ch 16 BYTEs    name of remote logged in machine
  24885.  2Ch    BYTE    extended privileges (v4+???)
  24886.         bit 0: user cannot change his password
  24887.  2Dh    WORD    time left in minutes (0000h = unlimited) (v4+???)
  24888.  
  24889. Values for last command:
  24890.  00h    login
  24891.  01h    process termination
  24892.  02h    open file
  24893.  03h    close file
  24894.  04h    create file
  24895.  05h    create new file
  24896.  06h    create unique file
  24897.  07h    commit data to disk
  24898.  08h    read file
  24899.  09h    write file
  24900.  0Ah    delete file
  24901.  0Bh    set file attributes
  24902.  0Ch    lock byte range
  24903.  0Dh    unlock byte range
  24904.  0Eh    create subdirectory
  24905.  0Fh    remove subdirectory
  24906.  10h    rename file
  24907.  11h    find first matching file
  24908.  12h    find next matching file
  24909.  13h    get disk free space
  24910.  14h    get a queue entry
  24911.  15h    set a queue entry
  24912.  16h    control the queue
  24913.  17h    return login information
  24914.  18h    return link description
  24915.  19h    seek on file
  24916.  1Ah    get server's time
  24917.  1Bh    create audit entry
  24918.  1Ch    open file in multitude of modes
  24919.  1Dh    change password
  24920.  1Eh    disable account
  24921.  1Fh    local server file copy
  24922. ---v3+---
  24923.  20h    get username from account file
  24924.  21h    translate server's logical path
  24925.  22h    make indirect file
  24926.  23h    get indirect file contents
  24927.  24h    get physical printer status
  24928.  25h    get logical print stream info
  24929.  26h    set logical print stream info
  24930.  27h    get user's account record
  24931. ---v4+---
  24932.  28h    request server shutdown
  24933.  29h    cancel server shutdown
  24934.  2Ah    stuff server's keyboard
  24935.  2Bh    write then commit data to disk
  24936.  2Ch    set extended queue entry
  24937.  2Dh    terminate user from server
  24938.  2Eh    enable/disable logins
  24939.  2Fh    flush server caches
  24940.  30h    change username
  24941.  31h    get extended queue entry
  24942.     (same as get queue, but can return named fields blanked)
  24943. ----------215FB1-----------------------------
  24944. INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
  24945.     AX = 5FB1h
  24946.     DS:SI -> 64-byte buffer for link description
  24947.     ES:DI -> ASCIZ machine and shared directory name in form
  24948.          "\\machine\shared-resource"
  24949. Return: CF clear if successful
  24950.         CX = access control list privilege bits for requesting user
  24951.         bit 4: (I) allow expansion of indirect files
  24952.             5: (A) allow attribute changing
  24953.             6: (P) allow physical access to device
  24954.             7: (E) allow program execution
  24955.             8: (N) allow file renaming
  24956.             9: (K) allow directory deletion
  24957.            10: (D) allow file deletion
  24958.            11: (L) allow file/directory lookups
  24959.            12: (M) allow directory creation
  24960.            13: (C) allow file creation
  24961.            14: (W) allow open for write and writing
  24962.            15: (R) allow open for read and reading
  24963.     CF set on error
  24964.         AX = error code
  24965. ----------215FB2-----------------------------
  24966. INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
  24967.     AX = 5FB2h
  24968.     BX = username entry index (0 for first)
  24969.     DS:SI -> 16-byte buffer for username
  24970.     ES:DI -> ASCIZ server name in form "\\machine"
  24971. Return: CF clear if successful
  24972.     CF set on error
  24973.         AX = error code
  24974.     BX = next queue entry index
  24975. ----------215FB3-----------------------------
  24976. INT 21 - LANtastic v3+ - TRANSLATE PATH
  24977.     AX = 5FB3h
  24978.     DS:SI -> 128-byte buffer for ASCIZ result
  24979.     ES:DI -> full ASCIZ path, including server name
  24980.     DX = types of translation to be performed
  24981.         bit 0: expand last component as indirect file
  24982.         1: return actual path relative to server's physical disk
  24983. Return: CF clear if successful
  24984.     CF set on error
  24985.         AX = error code
  24986. Note:    always expands any indirect files along the path
  24987. SeeALso: AX=5FB4h
  24988. ----------215FB4-----------------------------
  24989. INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
  24990.     AX = 5FB4h
  24991.     DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
  24992.     ES:DI -> full ASCIZ path of indirect file to create, incl machine name
  24993. Return: CF clear if successful
  24994.     CF set on error
  24995.         AX = error code
  24996. Note:    the contents of the indirect file may be any valid server-relative path
  24997. ----------215FB5-----------------------------
  24998. INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
  24999.     AX = 5FB5h
  25000.     DS:SI -> 128-byte buffer for ASCIZ indirect file contents
  25001.     ES:DI -> full ASCIZ path of indirect file
  25002. Return: CF clear if successful
  25003.     CF set on error
  25004.         AX = error code
  25005. ----------215FB6-----------------------------
  25006. INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS
  25007.     AX = 5FB6h
  25008.     ES:DI -> pointer to ASCIZ default user name, immediately followed by
  25009.         ASCIZ password
  25010.     BL = adapter number to use for default login attempt
  25011.         FFh try all valid adapters
  25012.         00h-05h try adapter 0-5 explicitly
  25013. Return: CF clear if successful
  25014.     CF set on error
  25015.         AX = error code
  25016. Notes:    call with ES:DI -> two nulls to disable auto-login
  25017. SeeAlso: AX=5FB7h
  25018. ----------215FB7-----------------------------
  25019. INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS
  25020.     AX = 5FB7h
  25021.     ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name
  25022. Return: CF clear if successful
  25023.         DL = adapter number used for default login attempt
  25024.         FFh all valid adapters will be tried
  25025.         00h-05h specified adapter will be tried explicitly
  25026.     CF set on error
  25027.         AX = error code
  25028. SeeAlso: AX=5F81h,AX=5FB6h
  25029. ----------215FC0-----------------------------
  25030. INT 21 - LANtastic - GET TIME FROM SERVER
  25031.     AX = 5FC0h
  25032.     DS:SI -> time block (see below)
  25033.     ES:DI -> ASCIZ server name to get time from
  25034. Return: CF clear if successful
  25035.     CF set on error
  25036.         AX = error code
  25037.  
  25038. Format of time block:
  25039. Offset    Size    Description
  25040.  00h    WORD    year
  25041.  02h    BYTE    day
  25042.  03h    BYTE    month
  25043.  04h    BYTE    minutes
  25044.  05h    BYTE    hour
  25045.  06h    BYTE    hundredths of second
  25046.  07h    BYTE    second
  25047. ----------215FC8-----------------------------
  25048. INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN
  25049.     AX = 5FC8h
  25050.     ES:DI -> ASCIZ server name in form "\\machine"
  25051.     DS:SI -> ASCIZ reason string (80 characters)
  25052.     CX = number of minutes until shutdown (0 = immediate)
  25053.     DX = option flags (see below)
  25054.         bit 0: auto reboot
  25055.         1: do not notify users
  25056.         2: halt after shutdown
  25057.         3: shutdown due to power fail (used by UPS)
  25058.         bits 4-7: reserved
  25059.         bits 8-14: user definable
  25060.         bit 15: reserved
  25061. Return: CF clear if successful
  25062.     CF set on error
  25063.         AX = error code
  25064. SeeAlso: AH=5FC9h
  25065. ----------215FC9-----------------------------
  25066. INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN
  25067.     AX = 5FC9h
  25068.     ES:DI -> ASCIZ server name in form "\\machine"
  25069. Return: CF clear if successful
  25070.     CF set on error
  25071.         AX = error code
  25072. Note:    you must have the "S" privilege to use this call
  25073. SeeAlso: AH=5FC8h
  25074. ----------215FCA-----------------------------
  25075. INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER
  25076.     AX = 5FCAh
  25077.     ES:DI -> ASCIZ server name in form "\\machine"
  25078.     DS:SI -> ASCIZ string to stuff (128 bytes)
  25079. Return: CF clear if successful
  25080.     CF set on error
  25081.         AX = error code
  25082. Note:    you must have the "S" privilege to use this call
  25083.     maximum number of characters that can be stuffed is determined by the
  25084.       server's RUN BUFFER SIZE.
  25085. ----------215FCB-----------------------------
  25086. INT 21 - LANtastic v4.1+ - TERMINATE USER
  25087.     AX = 5FCBh
  25088.     ES:DI -> ASCIZ server name in form "\\machine"
  25089.     DS:SI -> blank-padded username.     A null char = wildcard.
  25090.     DS:DX -> blank-padded machine name.  A null char = wildcard.
  25091.     CX = minutes until termination (0 = immediate)
  25092. Return: CF clear if successful
  25093.     CF set on error
  25094.         AX = error code
  25095. Note:    you must have the "S" privilege to use this call
  25096.     you cannot log yourself out using this call
  25097. SeeAlso: AX=5F82h
  25098. ----------215FCC-----------------------------
  25099. INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS
  25100.     AX = 5FCCh
  25101.     ES:DI -> ASCIZ server name in form "\\machine"
  25102.     CX = bit values (value of bits you want to set)     See below.
  25103.     DX = bit mask (bits you are interested in, 0 = get only)  See 
  25104. below.
  25105. Return: CF clear if successful
  25106.         CX = control bits after call
  25107.         bit 0: disable logins
  25108.     CF set on error
  25109.         AX = error code
  25110. Note:    you must have the "S" privilege to SET, anyone can GET.
  25111. ----------215FCD-----------------------------
  25112. INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES
  25113.     AX = 5FCDh
  25114.     ES:DI -> ASCIZ server name in form "\\machine"
  25115. Return: CF clear if successful
  25116.     CF set on error
  25117.         AX = error code
  25118. Note:    you must have the "S" privilege to use this call.
  25119. ----------215FD0-----------------------------
  25120. INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
  25121.     AX = 5FD0h
  25122. Return: CF clear if successful
  25123.         CX = redirected printer timeout in clock ticks of 55ms
  25124.         0000h if timeout disabled
  25125.     CF set on error
  25126.         AX = error code
  25127. SeeAlso: AX=5FD1h
  25128. ----------215FD1-----------------------------
  25129. INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
  25130.     AX = 5FD1h
  25131.     CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
  25132. Return: CF clear if successful
  25133.     CF set on error
  25134.         AX = error code
  25135. SeeAlso: AX=5FD0h
  25136. ----------215FE0-----------------------------
  25137. INT 21 C - LANtastic - GET DOS SERVICE VECTOR
  25138.     AX = 5FE0h
  25139. Return: CF clear if successful
  25140.         ES:BX -> current FAR service routine
  25141.     CF set on error
  25142.         AX = error code
  25143. Note:    the service routine is called by the LANtastic redirector whenever DOS
  25144.       may safely be called, permitting external TSRs and drivers to hook
  25145.       into LANtastic's DOS busy flag checking
  25146. SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h
  25147. ----------215FE1-----------------------------
  25148. INT 21 - LANtastic - SET DOS SERVICE VECTOR
  25149.     AX = 5FE1h
  25150.     ES:BX -> FAR routine to call when DOS services are available
  25151. Return: CF clear if successful
  25152.     CF set on error
  25153.         AX = error code
  25154. Note:    new handler must chain to previous handler as its first action
  25155. SeeAlso: AX=5FE0h
  25156. ----------215FE2-----------------------------
  25157. INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
  25158.     AX = 5FE2h
  25159. Return: CF clear if successful
  25160.         ES:BX -> current FAR message service routine
  25161.     CF set on error
  25162.         AX = error code
  25163. SeeAlso: AX=5FE3h
  25164. ----------215FE3-----------------------------
  25165. INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
  25166.     AX = 5FE3h
  25167.     ES:BX -> FAR routine for processing network messages
  25168. Return: CF clear if successful
  25169.     CF set on error
  25170.         AX = error code
  25171. Notes:    handler must chain to previous handler as its first action
  25172.     on invocation, ES:BX -> just-received message
  25173. SeeAlso: AX=5FE2h
  25174. ----------2160-------------------------------
  25175. INT 21 - DOS 3.0+ - CANONICALIZE FILENAME OR PATH
  25176.     AH = 60h
  25177.     DS:SI -> ASCIZ filename or path
  25178.     ES:DI -> 128-byte buffer for canonicalized name
  25179. Return: CF set on error
  25180.         AX = error code
  25181.         02h invalid component in directory path or drive letter only
  25182.         03h malformed path or invalid drive letter
  25183.         ES:DI buffer unchanged
  25184.     CF clear if successful
  25185.         AH = 00h
  25186.         AL = destroyed (00h or 5Ch or last char of current dir on drive)
  25187.         buffer filled with qualified name of form D:\PATH\FILE.EXT or
  25188.           \\MACHINE\PATH\FILE.EXT
  25189. Notes:    the input path need not actually exist
  25190.     letters are uppercased, forward slashes converted to backslashes,
  25191.       asterisks converted to appropriate number of question marks, and
  25192.       file and directory names are truncated to 8.3 if necessary.
  25193.     '.' and '..' in the path are resolved
  25194.     filespecs on local drives always start with "d:", those on network
  25195.       drives always start with "\\"
  25196.     if path string is on a JOINed drive, the returned name is the one that
  25197.       would be needed if the drive were not JOINed; similarly for a
  25198.       SUBSTed, ASSIGNed, or network drive letter.    Because of this, it is
  25199.       possible to get a qualified name that is not legal under the current
  25200.       combination of SUBSTs, ASSIGNs, JOINs, and network redirections
  25201.     under DOS 3.3 through 5.00, a device name is translated differently if
  25202.       the device name does not have an explicit directory or the directory
  25203.       is \DEV (relative directory DEV from the root directory works
  25204.       correctly).  In these cases, the returned string consists of the
  25205.       unchanged device name and extension appended to the string X:/
  25206.       (forward slash instead of backward slash as in all other cases) where
  25207.       X is the default or explicit drive letter.
  25208.     functions which take pathnames require canonical paths if invoked via
  25209.       INT 21/AX=5D00h
  25210.     supported by OS/2 v1.1 compatibility box
  25211.     NetWare 2.1x does not support characters with the high bit set; early
  25212.       versions of NetWare 386 support such characters except in this call.
  25213.       In addition, NetWare returns error code 3 for the path "X:\"; one
  25214.       should use "X:\." instead.
  25215.     for DOS 3.3-5.0, the input and output buffers may be the same, as the
  25216.       canonicalized name is built in an internal buffer and copied to the
  25217.       specified output buffer as the very last step
  25218.     for DR DOS 6.0, this function is not automatically called when on a
  25219.       network.  Device drivers reportedly cannot make this call from their
  25220.       INIT function.  Using the same pointer for both input and output
  25221.       buffers is not supported in the April 1992 and earlier versions of
  25222.       DR DOS
  25223. SeeAlso: INT 2F/AX=1123h,INT 2F/AX=1221h
  25224. ----------2161-------------------------------
  25225. INT 21 - DOS 3+ - UNUSED
  25226.     AH = 61h
  25227. Return: AL = 00h
  25228. Note:    this function does nothing and returns immediately
  25229. ----------2162-------------------------------
  25230. INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS
  25231.     AH = 62h
  25232. Return: BX = segment of PSP for current process
  25233. Notes:    under DOS 3+, this function does not use any of the DOS-internal stacks
  25234.       and may thus be called at any time, even during another INT 21h call
  25235.     the current PSP is not necessarily the caller's PSP
  25236.     identical to the undocumented AH=51h
  25237. SeeAlso: AH=50h,AH=51h
  25238. ----------216300-----------------------------
  25239. INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
  25240.     AX = 6300h
  25241. Return: CF clear if successful
  25242.         DS:SI -> lead byte table (see below)
  25243.     CF set on error
  25244.         AX = error code (01h) (see AH=59h)
  25245. Notes:    does not preserve any registers other than SS:SP
  25246.     the US version of MSDOS 3.30 treats this as an unused function,
  25247.       setting AL=00h and returning immediately
  25248. SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh
  25249.  
  25250. Format of lead byte table entry:
  25251. Offset    Size    Description
  25252.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  25253.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  25254.     ...
  25255.   N   2 BYTEs    00h,00h end flag
  25256. ----------216300-----------------------------
  25257. INT 21 - Far East DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD TABLE
  25258.     AX = 6300h
  25259. Return: AL = error code
  25260.         00h successful
  25261.         DS:SI -> DBCS table (see below)
  25262.         all other registers except CS:IP and SS:SP destroyed
  25263.         FFh not supported
  25264. Notes:    probably identical to AH=63h/AL=00h for DOS 2.25
  25265.     the US version of MSDOS 3.30 treats this as an unused function,
  25266.       setting AL=00h and returning immediately
  25267.     the US version of DOS 4.0+ accepts this function, but returns an empty
  25268.       list
  25269. SeeAlso: AX=6300h"DOS 2.25"
  25270.  
  25271. Format of DBCS table:
  25272. Offset    Size    Description
  25273.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  25274.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  25275.     ...
  25276.   N   2 BYTEs    00h,00h end flag
  25277. ----------216301-----------------------------
  25278. INT 21 - DOS 2.25, Far East DOS 3.2+ - SET KOREAN (HANGUL) INPUT MODE
  25279.     AX = 6301h
  25280.     DL = new mode
  25281.         00h return only full characters on DOS keyboard input functions
  25282.         01h    return partially-formed characters also
  25283. Return: AL = status
  25284.         00h successful
  25285.         FFh invalid mode
  25286. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h
  25287. ----------216302-----------------------------
  25288. INT 21 - DOS 2.25, Far East DOS 3.2+ - GET KOREAN (HANGUL) INPUT MODE
  25289.     AX = 6302h
  25290. Return: AL = status
  25291.         00h successful
  25292.         DL = current input mode
  25293.             00h return only full characters
  25294.             01h return partial characters
  25295.         FFh not supported
  25296. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h
  25297. ----------2164-------------------------------
  25298. INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
  25299.     AH = 64h
  25300.     AL = flag
  25301.         00h (default) call device driver function 5 (non-dest read)
  25302.             before INT 21/AH=01h,08h,0Ah
  25303.         nonzero don't call driver function 5
  25304. Return: nothing
  25305. Notes:    called by DOS 3.3+ PRINT.COM
  25306.     does not use any of the DOS-internal stacks and is thus fully
  25307.       reentrant
  25308. SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h
  25309. ----------2164--BX0000-----------------------
  25310. INT 21 - OS/2 v2.0 Virtual DOS Machine - GET/SET TASK TITLE
  25311.     AH = 64h
  25312.     BX = 0000h
  25313.     CX = 636Ch
  25314.     DX = function
  25315.         0000h enable automatic title switch on INT 21/AH=4Bh
  25316.         0001h set session title
  25317.         ES:DI -> new ASCIZ title or "" to restore original title
  25318.         0002h get session title
  25319.         ES:DI -> buffer for current title
  25320.         Return: buffer filled (single 00h if title never changed)
  25321. SeeAlso: INT 15/AH=12h/BH=05h,INT 21/AH=4Bh
  25322. ----------2165-------------------------------
  25323. INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
  25324.     AH = 65h
  25325.     AL = info ID
  25326.         01h get general internationalization info
  25327.         02h get pointer to uppercase table
  25328.         04h get pointer to filename uppercase table
  25329.         05h get pointer to filename terminator table
  25330.         06h get pointer to collating sequence table
  25331.         07h (DOS 4+) get pointer to Double-Byte Character Set table
  25332.     BX = code page (-1=global code page)
  25333.     DX = country ID (-1=current country)
  25334.     ES:DI -> country information buffer (see below)
  25335.     CX = size of buffer (>= 5)
  25336. Return: CF set on error
  25337.         AX = error code (see AH=59h)
  25338.     CF clear if succesful
  25339.         CX = size of country information returned
  25340.         ES:DI -> country information
  25341. Notes:    AL=05h appears to return same info for all countries and codepages; it
  25342.       has been documented for DOS 5.0, but was undocumented in ealier
  25343.       versions
  25344.     NLSFUNC must be installed to get info for countries other than the
  25345.       default
  25346.     subfunctions 02h and 04h are identical under OS/2
  25347. SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h
  25348.  
  25349. Format of country information:
  25350. Offset    Size    Description
  25351.  00h    BYTE    info ID
  25352. ---if info ID = 01h---
  25353.  01h    WORD    size
  25354.  03h    WORD    country ID
  25355.  05h    WORD    code page
  25356.  07h 34 BYTEs    country-dependent info (see AH=38h)
  25357. ---if info ID = 02h---
  25358.  01h    DWORD    pointer to uppercase table (see below)
  25359. ---if info ID = 04h---
  25360.  01h    DWORD    pointer to filename uppercase table (see below)
  25361. ---if info ID = 05h---
  25362.  01h    DWORD    pointer to filename character table (see below)
  25363. ---if info ID = 06h---
  25364.  01h    DWORD    pointer to collating table (see below)
  25365. ---if info ID = 07h (DOS 4+)---
  25366.  01h    DWORD    pointer to DBCS lead byte table (see below)
  25367.  
  25368. Format of uppercase table:
  25369. Offset    Size    Description
  25370.  00h    WORD    table size
  25371.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  25372.  
  25373. Format of collating table:
  25374. Offset    Size    Description
  25375.  00h    WORD    table size
  25376.  02h 256 BYTEs    values used to sort characters 00h to FFh
  25377.  
  25378. Format of filename terminator table:
  25379. Offset    Size    Description
  25380.  00h    WORD    table size (not counting this word)
  25381.  02h    BYTE    ??? (01h for MSDOS 3.30-5.00)
  25382.  03h    BYTE    lowest permissible character value for filename
  25383.  04h    BYTE    highest permissible character value for filename
  25384.  05h    BYTE    ??? (00h for MSDOS 3.30-5.00)
  25385.  06h    BYTE    first excluded character in range \ all characters in this
  25386.  07h    BYTE    last excluded character in range  / range are illegal
  25387.  08h    BYTE    ??? (02h for MSDOS 3.30-5.00)
  25388.  09h    BYTE    number of illegal (terminator) characters
  25389.  0Ah  N BYTES    characters which terminate a filename:    ."/\[]:|<>+=;,
  25390. Note:    partially documented for DOS 5.0, but undocumented for earlier versions
  25391.  
  25392. Format of filename uppercase table:
  25393. Offset    Size    Description
  25394.  00h    WORD    table size
  25395.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  25396.  
  25397. Format of DBCS lead byte table:
  25398. Offset    Size    Description
  25399.  00h    WORD    length
  25400.  02h 2N BYTEs    start/end for N lead byte ranges
  25401.     WORD    0000h    (end of table)
  25402. ----------2165-------------------------------
  25403. INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
  25404.     AH = 65h
  25405.     AL = function
  25406.         20h capitalize character
  25407.         DL = character to capitalize
  25408.         Return: DL = capitalized character
  25409.         21h capitalize string
  25410.         DS:DX -> string to capitalize
  25411.         CX = length of string
  25412.         22h capitalize ASCIZ string
  25413.         DS:DX -> ASCIZ string to capitalize
  25414. Return: CF set on error
  25415.         AX = error code (see AH=59h)
  25416.     CF clear if successful
  25417. Note:    these calls have been documented for DOS 5+, but were undocumented in
  25418.       DOS 4.x.
  25419. ----------216523-----------------------------
  25420. INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
  25421.     AX = 6523h
  25422.     DL = character
  25423.     DH = second character of double-byte character (if applicable)
  25424. Return: CF set on error
  25425.     CF clear if successful
  25426.         AX = type
  25427.         00h no
  25428.         01h yes
  25429.         02h neither yes nor no
  25430. ----------2165-------------------------------
  25431. INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
  25432.     AH = 65h
  25433.     AL = function
  25434.         A0h capitalize filename character
  25435.         DL = character to capitalize
  25436.         Return: DL = capitalized character
  25437.         A1h capitalize counted filename string
  25438.         DS:DX -> filename string to capitalize
  25439.         CX = length of string
  25440.         A2h capitalize ASCIZ filename
  25441.         DS:DX -> ASCIZ filename to capitalize
  25442. Return: CF set on error
  25443.         AX = error code (see AH=59h)
  25444.     CF clear if successful
  25445. Note:    nonfunctional in DOS 4.00 through 5.00 due to a bug (the code sets a
  25446.       pointer depending on the high bit of AL, but doesn't clear the
  25447.       bit before branching by function number).
  25448. ----------216601-----------------------------
  25449. INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
  25450.     AX = 6601h
  25451. Return: CF set on error
  25452.         AX = error code (see AH=59h)
  25453.     CF clear if successful
  25454.         BX = active code page (see AX=6602h)
  25455.         DX = system code page
  25456. SeeAlso: AX=6602h
  25457. ----------216602-----------------------------
  25458. INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
  25459.     AX = 6602h
  25460.     BX = active code page
  25461.         437 US
  25462.         850 Multilingual
  25463.         852 Slavic/Latin II (DOS 5+)
  25464.         857 Turkish
  25465.         860 Portugal
  25466.         861    Iceland
  25467.         863 Canada (French)
  25468.         865 Norway/Denmark
  25469.     DX = system code page (active page at boot time)
  25470. Return: CF set on error
  25471.         AX = error code (see AH=59h)
  25472.     CF clear if successful
  25473. SeeAlso: AX=6601h
  25474. ----------2167-------------------------------
  25475. INT 21 - DOS 3.3+ - SET HANDLE COUNT
  25476.     AH = 67h
  25477.     BX = size of new file handle table for process
  25478. Return: CF clear if successful
  25479.     CF set on error
  25480.         AX = error code (see AH=59h)
  25481. Desc:    adjust the size of the per-process open file table, thus raising or
  25482.       lowering the limit on the number of files the caller can open
  25483.       simultaneously
  25484. Notes:    if BX <= 20, no action is taken if the handle limit has not yet been
  25485.       increased, and the table is copied back into the PSP if the limit
  25486.       is currently > 20 handles
  25487.     for file handle tables of > 20 handles, DOS 3.30 never reuses the
  25488.       same memory block, even if the limit is being reduced; this can lead
  25489.       to memory fragmentation as a new block is allocated and the existing
  25490.       one freed
  25491.     only the first 20 handles are copied to child processes in DOS 3.3
  25492. BUG:    the original release of DOS 3.30 allocates a full 64K for the handle
  25493.       table on requests for an even number of handles
  25494. SeeAlso: AH=26h,AH=86h
  25495. ----------2168-------------------------------
  25496. INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE
  25497.     AH = 68h
  25498.     BX = file handle
  25499. Return: CF clear if successful
  25500.         all data still in DOS disk buffers is written to disk immediately,
  25501.           and the file's directory entry is updated
  25502.     CF set on error
  25503.         AX = error code (see AH=59h)
  25504. SeeAlso: AX=5D01h,AH=6Ah,INT 2F/AX=1107h
  25505. ----------2169-------------------------------
  25506. INT 21 U - DOS 4+ internal - GET/SET DISK SERIAL NUMBER
  25507.     AH = 69h
  25508.     AL = subfunction
  25509.         00h    get serial number
  25510.         01h set serial number
  25511.     BL = drive (0=default, 1=A, 2=B, etc)
  25512.     DS:DX -> disk info (see below)
  25513. Return: CF set on error
  25514.         AX = error code (see AH=59h)
  25515.     CF clear if successful
  25516.         AX destroyed
  25517.         (AL = 00h) buffer filled with appropriate values from extended BPB
  25518.         (AL = 01h) extended BPB on disk set to values from buffer
  25519. Notes:    does not generate a critical error; all errors are returned in AX
  25520.     error 0005h given if no extended BPB on disk
  25521.     does not work on network drives (error 0001h)
  25522.     buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
  25523.       extended BPB on disk
  25524.     this function is supported under Novell NetWare versions 2.0A through
  25525.       3.11; the returned serial number is the one a DIR would display,
  25526.       the volume label is the NetWare volume label, and the file system
  25527.       is set to "FAT16".
  25528.     the serial number is computed from the current date and time when the
  25529.       disk is created; the first part is the sum of the seconds/hundredths
  25530.       and month/day, the second part is the sum of the hours/minutes and
  25531.       year
  25532.     the volume label which is read or set is the one stored in the extended
  25533.       BPB on disks formatted with DOS 4.0+, rather than the special root
  25534.       directory entry used by the DIR command in COMMAND.COM (use AH=11h
  25535.       to find that volume label)
  25536. SeeAlso: AX=440Dh
  25537.  
  25538. Format of disk info:
  25539. Offset    Size    Description
  25540.  00h    WORD    info level (zero)
  25541.  02h    DWORD    disk serial number (binary)
  25542.  06h 11 BYTEs    volume label or "NO NAME    " if none present
  25543.  11h  8 BYTEs    (AL=00h only) filesystem type--string "FAT12   " or "FAT16   "
  25544. ----------2169-------------------------------
  25545. INT 21 - DR-DOS 5.0 - NULL FUNCTION
  25546.     AH = 69h
  25547. Return: AL = 00h
  25548. SeeAlso: AH=18h
  25549. ----------216969-----------------------------
  25550. INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK
  25551.     AX = 6969h
  25552. Return: AX = 0666h if resident
  25553. SeeAlso: AX=58CCh,AH=76h"VIRUS"
  25554. ----------216A-------------------------------
  25555. INT 21 U - DOS 4+ - COMMIT FILE
  25556.     AH = 6Ah
  25557.     BX = file handle
  25558. Return: CF clear if successful
  25559.         AH = 68h
  25560.     CF set on error
  25561.         AX = error code (06h) (see AH=59h)
  25562. Note:    identical to AH=68h in DOS 5.0; not known whether this is the case in
  25563.       DOS 4.x
  25564. SeeAlso: AH=68h
  25565. ----------216B-------------------------------
  25566. INT 21 U - DOS 4.0 internal - ???
  25567.     AH = 6Bh
  25568.     AL = subfunction
  25569.         00h ???
  25570.         DS:SI -> Current Directory Structure???
  25571.         CL = drive (1=A:)
  25572.         01h ???
  25573.         DS:SI -> ???
  25574.         CL = file handle???
  25575.         02h ???
  25576.         DS:SI -> Current Directory Structure???
  25577.         DI = ???
  25578.         CX = drive (1=A:)
  25579. Return: CF set on error
  25580.         AX = error code (see INT 21/AH=59h)
  25581.     CF clear if successful
  25582. Note:    passed through to INT 2F/AX=112Fh with AX on top of stack
  25583. SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh
  25584. ----------216B-------------------------------
  25585. INT 21 U - DOS 5.0 - NULL FUNCTION
  25586.     AH = 6Bh
  25587. Return: AL = 00h
  25588. Note:    this function does nothing and returns immediately
  25589. SeeAlso: AH=6Bh"DOS 4"
  25590. ----------216C00-----------------------------
  25591. INT 21 - DOS 4+ - EXTENDED OPEN/CREATE
  25592.     AX = 6C00h
  25593.     BL = open mode as in AL for normal open (INT 21/AH=3Dh)
  25594.         bit 7: inheritance
  25595.         bits 4-6: sharing mode
  25596.         bit 3 reserved
  25597.         bits 0-2: access mode
  25598.     BH = flags
  25599.         bit 6 = auto commit on every write
  25600.         bit 5 = return error rather than doing INT 24h
  25601.     CX = create attribute
  25602.         bits 6-15 reserved
  25603.         bit 5: archive
  25604.         bit 4: reserved
  25605.         bit 3: volume label
  25606.         bit 2: system
  25607.         bit 1: hidden
  25608.         bit 0: readonly
  25609.     DL = action if file exists/does not exists
  25610.         bits 7-4 action if file does not exist
  25611.             0000 fail
  25612.             0001 create
  25613.         bits 3-0 action if file exists
  25614.             0000 fail
  25615.             0001 open
  25616.             0010 replace/open
  25617.     DH = 00h (reserved)
  25618.     DS:SI -> ASCIZ file name
  25619. Return: CF set on error
  25620.        AX = error code (see AH=59h)
  25621.     CF clear if successful
  25622.        AX = file handle
  25623.        CX = 1 file opened
  25624.         2 file created
  25625.         3 file replaced
  25626. Note:    the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
  25627.       and DL=12h
  25628. SeeAlso: AH=3Ch,AH=3Dh
  25629. ----------217070BX6060-----------------------
  25630. INT 21 - PCW Weather Card interface - GET DATA SEGMENT
  25631.     AX = 7070h
  25632.     BX = 6060h
  25633.     CX = 7070h
  25634.     DX = 7070h
  25635.     SX = 7070h
  25636.     DX = 7070h
  25637. Return: AX = segment of data structure
  25638. Notes:    the data structure is at offset 516 from this segment.
  25639.     the update byte is at offset 514 from this segment.  Updates are
  25640.       once per second while this byte is nonzero and it is decremented
  25641.       once per second.  While this byte is 0 updates are once per minute.
  25642. SeeAlso: AX=7070h/BX=7070h
  25643.  
  25644. Format of data structure:
  25645. Offset    Type    Description
  25646.  00h    WORD    hour
  25647.  02h    WORD    minute
  25648.  04h    WORD    second
  25649.  06h    WORD    day
  25650.  08h    WORD    month
  25651.  0Ah    WORD    year
  25652.  0Ch    WORD    ???
  25653.  0Eh    WORD    relative barometric pressure (in 1/100 inches)
  25654.  10h    WORD    ???
  25655.  12h    WORD    ???
  25656.  14h    WORD    temperature 1 (in 1/10 degrees F)
  25657.  16h    WORD    temperature 1 lowest (in 1/10 degrees F)
  25658.  18h    WORD    temperature 1 highest (in 1/10 degrees F)
  25659.  1Ah    WORD    temperature 2 (in 1/10 degrees F)
  25660.  1Ch    WORD    temperature 2 lowest (in 1/10 degrees F)
  25661.  1Eh    WORD    temperature 2 highest (in 1/10 degrees F)
  25662.  20h    WORD    wind speed (in MPH)
  25663.  22h    WORD    average of 60 wind speed samples (in MPH)
  25664.  24h    WORD    highest wind speed (in MPH)
  25665.  26h    WORD    wind chill factor  (in 1/10 degrees F)
  25666.  28h    WORD    lowest wind chill factor (in 1/10 degrees F)
  25667.  2Ah    WORD    ???
  25668.  2Ch    WORD    wind direction (in degrees)
  25669.  2Eh    WORD    accumulated daily rainfall (in 1/10 inches)
  25670.  30h    WORD    accumulated annual rainfall (in 1/10 inches)
  25671. ----------217070BX7070-----------------------
  25672. INT 21 - PCW Weather Card interface - INSTALLATION CHECK
  25673.     AX = 7070h
  25674.     BX = 7070h
  25675.     CX = 7070h
  25676.     DX = 7070h
  25677.     SX = 7070h
  25678.     DX = 7070h
  25679. Return: AX = 0070h
  25680.     BX = 0070h
  25681.     CX = 0070h
  25682.     DX = 0070h
  25683.     SX = 0070h
  25684.     DX = 0070h
  25685. SeeAlso: AX=7070h/BX=6060h,AX=8080h
  25686. ----------2176-------------------------------
  25687. INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK
  25688.     AH = 76h
  25689. Return: AL = 48h if resident
  25690. SeeAlso: AX=6969h,AX=7700h"VIRUS"
  25691. ----------217761-----------------------------
  25692. INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
  25693.     AX = 7761h ('wa')
  25694. Return: AX = 6177h
  25695. Note:    WATCH.COM is part of the "TSR" package by TurboPower Software
  25696. SeeAlso: INT 16/AX=7761h
  25697. ----------217700-----------------------------
  25698. INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK
  25699.     AX = 7700h
  25700. Return: AX = 0920h if resident
  25701. SeeAlso: AH=76h,AH=7Fh
  25702. ----------217F-------------------------------
  25703. INT 21 - VIRUS - "Squeaker" - INSTALLATION CHECK
  25704.     AH = 7Fh
  25705. Return: AH = 80h if resident
  25706. SeeAlso: AX=7700h,AH=83h"VIRUS"
  25707. ---------------------------------------------
  25708. Interrupt List, part 4 of 8
  25709. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  25710. ----------2180-------------------------------
  25711. INT 21 - European MSDOS 4.0 - "AEXEC" - EXECUTE PROGRAM IN BACKGROUND
  25712.     AH = 80h
  25713.     CX = mode
  25714.         0000h place child in zombie mode on exit to preserve exit code
  25715.         0001h discard child process and exit code on termination
  25716.     DS:DX -> ASCIZ full program name
  25717.     ES:BX -> parameter block (as for AX=4B00h)
  25718. Return: CF clear if successful
  25719.         AX = Command Subgroup ID (CSID)
  25720.     CF set on error
  25721.         AX = error code (see AH=59h)
  25722. Desc:    asynchronously execute a program, creating a new process for it
  25723. Notes:    this function is called by the DETACH command
  25724.     there is a system-wide limit of 32 processes
  25725.     the CSID is used to identify all processes that have been spawned by
  25726.       a given process, whether directly or indirectly
  25727.     programs to be run in the background must use the new executable format
  25728.       (see AH=4Bh)
  25729.     background processes may only perform asynchronous (background) EXECs,
  25730.       either this function or AX=4B04h
  25731.     background processes may execute INT 11, INT 12, INT 21, INT 2A, and
  25732.       INT 2F at any time; they may execute INT 10 and INT 16 only while
  25733.       they have opened a popup screen via INT 2F/AX=1401h; no other
  25734.       interrupts may be executed from the background
  25735.     background processes may not use drive B: or overlay their code
  25736.       segments
  25737. SeeAlso: AH=4Bh,AX=8700h,INT 2F/AX=1400h"POPUP"
  25738. ----------218080-----------------------------
  25739. INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY
  25740.     AX = 8080h
  25741. Return: ???
  25742. SeeAlso: AX=7070h/BX=7070h
  25743. ----------2181-------------------------------
  25744. INT 21 - European MSDOS 4.0 - "FREEZE" - STOP A PROCESS
  25745.     AH = 81h
  25746.     BX = flag (00h freeze command subtree, 01h only specified process)
  25747.     CX = Process ID of head of command subtree
  25748. Return: CF clear if successful
  25749.     CF set on error
  25750.         AX = error code (no such process)
  25751. Desc:    temporarily suspend a process or a process and all of its children
  25752. Note:    if BX=0001h, this call will not return until the process is actually
  25753.       frozen, which may not be until after it unblocks from an I/O
  25754.       operation
  25755. SeeAlso: AH=82h,AH=89h,AX=8E00h,INT 15/AX=101Dh
  25756. ----------2182-------------------------------
  25757. INT 21 - European MSDOS 4.0 - "RESUME" - RESTART A PROCESS
  25758.     AH = 82h
  25759.     BX = flag (00h resume command subtree, 01h only specified process)
  25760.     CX = Process ID of head of command subtree
  25761. Return: CF clear if successful
  25762.     CF set on error
  25763.         AX = error code (no such process)
  25764. Desc:    restart a previously-suspended process or a process and all of its
  25765.       children
  25766. SeeAlso: AX=81h,INT 15/AX=101Eh
  25767. ----------2183-------------------------------
  25768. INT 21 - European MSDOS 4.0 - "PARTITION" - GET/SET FOREGROUND PARTITION SIZE
  25769.     AH = 83h
  25770.     AL = function
  25771.         00h get size
  25772.         01h set new size
  25773.         BX = new size in paragraphs
  25774. Return: CF clear if successful
  25775.         BX = current size (function 00h) or old size (function 01h)
  25776.     CF set on error
  25777.         AX = error code (01h,07h,0Dh)(see AH=59h)
  25778. Desc:    specify or determine how much memory may be allocated by the foreground
  25779.       process
  25780. Note:    if the partition size is set to 0000h, no partition management is done
  25781.       and all memory allocation is compatible with DOS 3.2.
  25782.     the partition size can be changed regardless of what use is being made
  25783.       of the changed memory; subsequent allocations will follow the
  25784.       partition rules (foreground processes may allocate only foreground
  25785.       memory; background processes allocate background memory first, then
  25786.       foreground memory)
  25787. SeeAlso: AH=48h,AH=4Ah
  25788. ----------2183-------------------------------
  25789. INT 21 - VIRUS - "SVC" - INSTALLATION CHECK
  25790.     AH = 83h
  25791. Return: DX = 1990h if resident
  25792. SeeAlso: AH=76h,AH=84h"VIRUS"
  25793. ----------2184-------------------------------
  25794. INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK
  25795.     AH = 84h
  25796. Return: DX = 1990h if resident
  25797.         BH = version number (major in high nybble, minor in low)
  25798. SeeAlso: AH=83h"VIRUS",AH=89h"VIRUS"
  25799. ----------218400-----------------------------
  25800. INT 21 - European MSDOS 4.0 - "CREATMEM" - CREATE A SHARED MEMORY AREA
  25801.     AX = 8400h
  25802.     BX = size in bytes (0000h = 65536)
  25803.     CX = flags
  25804.         bit 6: zero-initialize segment
  25805.     DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
  25806. Return: CF clear if successful
  25807.         AX = segment address of shared memory global object
  25808.     CF set on error
  25809.         AX = error code (06h,08h) (see AH=59h)
  25810. Desc:    create an area of memory which may be accessed by multiple processes
  25811. Notes:    shared memory objects are created as special files (thus the
  25812.       restriction on the name)
  25813.     on successful creation, the reference count is set to 1
  25814. SeeAlso: AX=8401h,AX=8402h,INT 15/AX=DE19h
  25815. ----------218401-----------------------------
  25816. INT 21 - European MSDOS 4.0 - "GETMEM" - OBTAIN ACCESS TO SHARED MEMORY AREA
  25817.     AX = 8401h
  25818.     CX = flags
  25819.         bit 7: writable segment (ignored by MSDOS 4.0)
  25820.     DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
  25821. Return: CF clear if successful
  25822.         AX = segment address of shared memory global object
  25823.         CX = size in bytes
  25824.     CF set on error
  25825.         AX = error code (invalid name)
  25826. Desc:    get address of a previously-created area of memory which may be
  25827.       accessed by multiple processes    
  25828. Note:    this call increments the reference count for the shared memory area
  25829. SeeAlso: AX=8400h,AX=8402h
  25830. ----------218402-----------------------------
  25831. INT 21 - European MSDOS 4.0 - "RELEASEMEM" - FREE SHARED MEMORY AREA
  25832.     AX = 8402h
  25833.     BX = handle (segment address of shared memory object)
  25834. Return: CF clear if successful
  25835.     CF set on error
  25836.         AX = error code (no such name)
  25837. Desc:    indicate that the specified area of shared memory will no longer be
  25838.       used by the caller
  25839. Note:    the reference count is decremented and the shared memory area is
  25840.       deallocated if the new reference count is zero
  25841. SeeAlso: AX=8400h,AX=8401h,INT 15/AX=DE19h
  25842. ----------2185-------------------------------
  25843. INT 21 U - European MSDOS 4.0 - ???
  25844.     AH = 85h
  25845.     ???
  25846. Return: ???
  25847. ----------2186-------------------------------
  25848. INT 21 - European MSDOS 4.0 - "SETFILETABLE" - INSTALL NEW FILE HANDLE TABLE
  25849.     AH = 86h
  25850.     BX = total number of file handles in new table
  25851. Return: CF clear if successful
  25852.     CF set on error
  25853.         AX = error code (06h,08h) (see AH=59h)
  25854. Desc:    adjust the size of the per-process open file table, thus raising or
  25855.       lowering the limit on the number of files the caller can open
  25856.       simultaneously
  25857. Notes:    any currently-open files are copied to the new table
  25858.     if the table is increased beyond the default 20 handles, only the
  25859.       first 20 will be inherited by child processes
  25860.     error 06h is returned if the requested number of handles exceeds
  25861.       system limits or would require closing currently-open files
  25862. SeeAlso: AH=26h,AH=67h
  25863. ----------2187-------------------------------
  25864. INT 21 - European MSDOS 4.0 - "GETPID" - GET PROCESS IDENTIFIER
  25865.     AH = 87h
  25866. Return: AX = PID
  25867.     BX = parent process's PID
  25868.     CX = Command Subgroup ID (CSID)
  25869. Desc:    determine an identifier by which to access the calling process
  25870. Notes:    called by MS C v5.1 getpid() function
  25871.     this function apparently must return AX=0001h for INT 21/AH=80h to
  25872.       succeed
  25873.     one possible check for European MSDOS 4.0 is to issue this call with
  25874.       AL=00h and check whether AL is nonzero on return
  25875. SeeAlso: AH=30h,AH=62h,AH=80h
  25876. ----------2188-------------------------------
  25877. INT 21 U - European MSDOS 4.0 - ???
  25878.     AH = 88h
  25879.     ???
  25880. Return: ???
  25881. ----------2189-------------------------------
  25882. INT 21 - European MSDOS 4.0 - SLEEP
  25883.     AH = 89h
  25884.     CX = time in milliseconds or 0000h to give up time slice
  25885. Return: CF clear if successful
  25886.         CX = 0000h
  25887.     CF set on error
  25888.         AX = error code (interrupted system call)
  25889.         CX = sleep time remaining
  25890. Desc:    suspend the calling process for the specified duration
  25891. Notes:    the sleep interval is rounded up to the next higher increment of the
  25892.       scheduler clock, and may be extended further if other processes are
  25893.       running
  25894.     this call may be interrupted by signals (see AH=8Dh)
  25895.     reportedly called by Microsoft C 4.0 startup code
  25896.     background processes have higher priority than the foreground process,
  25897.       and should thus periodically yield the CPU
  25898. SeeAlso: AH=81h,INT 15/AX=1000h,INT 2F/AX=1680h,INT 7A/BX=000Ah
  25899. ----------2189-------------------------------
  25900. INT 21 - VIRUS - "Vriest" - INSTALLATION CHECK
  25901.     AH = 89h
  25902. Return: AX = 0123h if resident
  25903. SeeAlso: AH=84h"VIRUS",AH=90h"VIRUS"
  25904. ----------218A-------------------------------
  25905. INT 21 - European MSDOS 4.0 - "CWAIT" - WAIT FOR CHILD TO TERMINATE
  25906.     AH = 8Ah
  25907.     BL = range (00h command subtree, 01h any child)
  25908.     BH = suspend flag
  25909.         00h suspend if children exist but none are dead
  25910.         01h return if no dead children
  25911.     CX = Process ID of head of command subtree
  25912. Return: CF clear if successful
  25913.         AH = termination type
  25914.         00h normal termination
  25915.         01h aborted by Control-C
  25916.         02h aborted by I/O error
  25917.         03h terminate and stay resident
  25918.         04h aborted by signal
  25919.         05h aborted by program error
  25920.         AL = return code from child or aborting signal
  25921.         BX = PID of child (0000h if no dead children)
  25922.     CF set on error
  25923.         AX = error code (no child,interrupted system call)
  25924. Desc:    get return code from an asynchronously-executed child program,
  25925.       optionally waiting if no return code is available
  25926. SeeAlso: AH=4Bh,AH=4Dh,AH=80h,AH=8Dh
  25927. ----------218B-------------------------------
  25928. INT 21 U - European MSDOS 4.0 - ???
  25929.     AH = 8Bh
  25930.     ???
  25931. Return: ???
  25932. ----------218C-------------------------------
  25933. INT 21 - European MSDOS 4.0 - SET SIGNAL HANDLER
  25934.     AH = 8Ch
  25935.     AL = signal number (see below)
  25936.     BL = action (see below)
  25937.     DS:DX -> signal handler
  25938. Return: CF clear if successful
  25939.         AL = previous action
  25940.         ES:BX -> previous signal handler
  25941.     CF set on error
  25942.         AX = error code (01h,invalid SigNumber or Action) (see AH=59h)
  25943. Desc:    set the routine which will be invoked on a number of exceptional
  25944.       conditions
  25945. Note:    all signals will be sent to the most recently installed handler
  25946. SeeAlso: AH=8Dh
  25947.  
  25948. Values for signal number:
  25949.  01h    SIGINTR        Control-C or user defined interrupt key
  25950.  08h    SIGTERM        program termination
  25951.  09h    SIGPIPE        broken pipe
  25952.  0Dh    SIGUSER1    reserved for user definition
  25953.  0Eh    SIGUSER2    reserved for user definition
  25954.  
  25955. Values for signal action:
  25956.  00h    SIG_DFL        terminate process on receipt
  25957.  01h    SIG_IGN        ignore signal
  25958.  02h    SIG_GET        signal is accepted
  25959.  03h    SIG_ERR        sender gets error
  25960.  04h    SIG_ACK        acknowledge received signal and clear it, but don't
  25961.             change current setting
  25962.  
  25963. Signal handler is called with:
  25964.     AL = signal number
  25965.     AH = signal argument
  25966. Return: RETF, CF set: terminate process
  25967.     RETF, CF clear, ZF set: abort any interrupted system call with an error
  25968.     RETF, CF clear, ZF clear: restart any interrupted system call
  25969.     IRET: restart any interrupted system call
  25970. Note:    the signal handler may also perform a nonlocal GOTO by resetting the
  25971.       stack pointer and jumping; before doing so, it should dismiss the
  25972.       signal by calling this function with BL=04h
  25973. ----------218D-------------------------------
  25974. INT 21 - European MSDOS 4.0 - SEND SIGNAL
  25975.     AH = 8Dh
  25976.     AL = signal number (see AH=8Ch)
  25977.     BH = signal argument
  25978.     BL = action
  25979.         00h send to entire command subtree
  25980.         01h send only to specified process
  25981.     DX = Process ID
  25982. Return: CF clear if successful
  25983.     CF set on error
  25984.         AX = error code (01h,06h)(see AH=59h)
  25985. Desc:    invoke the exceptional-condition handler for the specified process
  25986. Note:    error 06h may be returned if one or more of the affected processes
  25987.       have an error handler for the signal
  25988. SeeAlso: AH=8Ch
  25989. ----------218E00-----------------------------
  25990. INT 21 - European MSDOS 4.0 - "SETPRI" - GET/SET PROCESS PRIORITY
  25991.     AX = 8E00h
  25992.     BH = 00h
  25993.     BL = action
  25994.         00h set priority for command subtree
  25995.         01h set priority for specified process only
  25996.     CX = Process ID
  25997.     DH = 00h
  25998.     DL = change in priority (00h to get priority)
  25999. Return: CF clear if successful
  26000.         DL = process priority
  26001.         DH destroyed
  26002.     CF set on error
  26003.         AX = error code (01h,no such process)(see AH=59h)
  26004. Desc:    specify or determine the execution priority of the specified process
  26005.       or the process and all of its children
  26006. SeeAlso: AH=81h
  26007. ----------218F-------------------------------
  26008. INT 21 U - European MSDOS 4.0 - ???
  26009.     AH = 8Fh
  26010.     ???
  26011. Return: ???
  26012. ----------2190-------------------------------
  26013. INT 21 U - European MSDOS 4.0 - ???
  26014.     AH = 90h
  26015.     ???
  26016. Return: ???
  26017. ----------2190-------------------------------
  26018. INT 21 - VIRUS - "Carioca" - INSTALLATION CHECK
  26019.     AH = 90h
  26020. Return: AH = 01h if resident
  26021. SeeAlso: AH=89h"VIRUS",AX=9753h"VIRUS"
  26022. ----------2191-------------------------------
  26023. INT 21 U - European MSDOS 4.0 - ???
  26024.     AH = 91h
  26025.     ???
  26026. Return: ???
  26027. ----------2192-------------------------------
  26028. INT 21 U - European MSDOS 4.0 - ???
  26029.     AH = 92h
  26030.     ???
  26031. Return: ???
  26032. ----------2193-------------------------------
  26033. INT 21 - European MSDOS 4.0 - "PIPE" - CREATE A NEW PIPE
  26034.     AH = 93h
  26035.     CX = size in bytes
  26036. Return: CF clear if successful
  26037.         AX = read handle
  26038.         BX = write handle
  26039.     CF set on error
  26040.         AX = error code (08h) (see AH=59h)
  26041. Desc:    create a communications channel which may be used for interprocess
  26042.       data and command exchanges
  26043. SeeAlso: AH=3Ch,AH=3Fh,AH=40h,AH=84h
  26044. ----------2194-------------------------------
  26045. INT 21 U - European MSDOS 4.0 - ???
  26046.     AH = 94h
  26047.     ???
  26048. Return: ???
  26049. ----------2195-------------------------------
  26050. INT 21 - European MSDOS 4.0 - HARD ERROR PROCESSING
  26051.     AH = 95h
  26052.     AL = new state
  26053.        00h enabled
  26054.        01h disabled, automatically fail hard errors
  26055. Return: AX = previous setting
  26056. Desc:    specify whether hard (critical) errors should automatically fail the
  26057.       system call or invoke an INT 24
  26058. SeeAlso: INT 24
  26059. ----------2196-------------------------------
  26060. INT 21 U - European MSDOS 4.0 - ???
  26061.     AH = 96h
  26062.     ???
  26063. Return: ???
  26064. ----------2197-------------------------------
  26065. INT 21 U - European MSDOS 4.0 - ???
  26066.     AH = 97h
  26067.     ???
  26068. Return: ???
  26069. ----------219753-----------------------------
  26070. INT 21 - VIRUS - "Nina" - INSTALLATION CHECK
  26071.     AX = 9753h
  26072. Return: never (executes original program) if virus resident
  26073. SeeAlso: AH=90h"VIRUS",AX=A1D5h"VIRUS"
  26074. ----------2198-------------------------------
  26075. INT 21 U - European MSDOS 4.0 - ???
  26076.     AH = 98h
  26077.     ???
  26078. Return: ???
  26079. ----------2199-------------------------------
  26080. INT 21 u - European MSDOS 4.0 - "PBLOCK" - BLOCK A PROCESS
  26081.     AH = 99h
  26082.     DS:BX -> memory location to block on
  26083.     CX = timeout in milliseconds
  26084.     DH = nonzero if interruptible
  26085. Return: CF clear if awakened by event
  26086.         AX = 0000h
  26087.     CF set if unusual wakeup
  26088.         ZF set if timeout, clear if interrupted by signal
  26089.         AX = nonzero
  26090. Desc:    suspend calling process until another process sends a "restart" signal
  26091.       or a timeout occurs
  26092. SeeAlso: AH=9Ah,INT 2F/AX=0802h
  26093. ----------219A-------------------------------
  26094. INT 21 u - European MSDOS 4.0 - "PRUN" - UNBLOCK A PROCESS
  26095.     AH = 9Ah
  26096.     DS:BX -> memory location processes may have blocked on
  26097. Return: AX = number of processes awakened
  26098.     ZF set if no processes awakened
  26099. Desc:    restart all processes waiting for the specified "restart" signal
  26100. SeeAlso: AH=99h,INT 2F/AX=0802h
  26101. ----------21A0-------------------------------
  26102. INT 21 - Attachmate Extra - GET 3270 DISPLAY STATE
  26103.     AH = A0h
  26104. Return: AL = display status
  26105.         bit     7  : 0=windowed, 1=enlarged
  26106.         bits 6-3: current screen profile number 0-9
  26107.         bits 2-0: active window number
  26108.             0=PC, 1-4=host B-E, 5-6=notepad F-G
  26109.     BX = host window status
  26110.         bit 15:  reserved
  26111.         bit 14:  0=host E window installed, 1=not
  26112.         bit 13:  0=host E terminal on, 1=off
  26113.         bit 12:  0=host E window displayed, 1=not
  26114.         bit 11:  reserved
  26115.         bit 10:  0=host D window installed, 1=not
  26116.         bit     9:  0=host D terminal on, 1=off
  26117.         bit     8:  0=host D window displayed, 1=not
  26118.         bit     7:  reserved
  26119.         bit     6:  0=host C window installed, 1=not
  26120.         bit     5:  0=host C terminal on, 1=off
  26121.         bit     4:  0=host C window displayed, 1=not
  26122.         bit     3:  reserved
  26123.         bit     2:  0=host B window installed, 1=not
  26124.         bit     1:  0=host B terminal on, 1=off
  26125.         bit     0:  0=host B window displayed, 1=not
  26126. Note:    Attachmate Extra is a 3270 emulator by Attachmate Corporation
  26127. SeeAlso: AH=A1h
  26128. ----------21A1-------------------------------
  26129. INT 21 - Attachmate Extra - SET 3270 DISPLAY STATE
  26130.     AH = A1h
  26131.     AL = set status byte
  26132.         bit     7  : 0=windowed, 1=enlarged
  26133.         bits 6-3: current screen profile number 0-9
  26134.         bits 2-0: active window number
  26135.             0=PC, 1-4=host B-E, 5-6=notepad F-G
  26136. SeeAlso: AH=A0h,AH=A2h
  26137. ----------21A1D5-----------------------------
  26138. INT 21 - VIRUS - "789"/"Filehider" - INSTALLATION CHECK
  26139.     AX = A1D5h
  26140. Return: AX = 900Dh if resident
  26141. SeeAlso: AX=9753h,AX=A55Ah
  26142. ----------21A2-------------------------------
  26143. INT 21 - Attachmate Extra - SET HOST WINDOW STATE
  26144.     AH = A2h
  26145.     AL = set status byte
  26146.         bit     7  : 0=power off, 1=power on
  26147.         bit     6  : 0=not installed, 1=installed
  26148.         bits 5-3: reserved
  26149.         bits 2-0: window number 1-4=host B-E
  26150. SeeAlso: AH=A1h
  26151. ----------21A3-------------------------------
  26152. INT 21 - Attachmate Extra - SEND KEYSTROKES TO HOST WINDOW
  26153.     AH = A3h
  26154.     AL = window number (1-4=host B-E)
  26155.     CX = 0001h
  26156.     DS:BX -> keystroke buffer
  26157.     DL = zero if keystroke buffer contains host function code,
  26158.          non-zero if keystroke buffer contains ASCII character
  26159. Return: CX = zero if character sent, non-zero if not
  26160.     BX incremented if CX=0
  26161.  
  26162. Values for host function code:
  26163.     00h=reserved    10h=PF16    20h=Clear    30h=SysRq
  26164.     01h=PF1        11h=PF17    21h=Print    31h=ErInp
  26165.     02h=PF2        12h=PF18    22h=Left    32h=ErEof
  26166.     03h=PF3        13h=PF19    23h=Right    33h=Ident
  26167.     04h=PF4        14h=PF20    24h=Up        34h=Test
  26168.     05h=PF5        15h=PF21    25h=Down    35h=Reset
  26169.     06h=PF6        16h=PF22    26h=Home    36h=DevCncl
  26170.     07h=PF7        17h=PF23    27h=Fast Left    37h=Dup
  26171.     08h=PF8        18h=PF24    28h=Fast Right    38h=FldMark
  26172.     09h=PF9        19h=Alt on    29h=Bksp    39h=Enter
  26173.     0Ah=PF10    1Ah=Alt off    2Ah=Insert    3Ah=CrSel
  26174.     0Bh=PF11    1Bh=Shift on    2Bh=Delete
  26175.     0Ch=PF12    1Ch=Shift off    2Ch=Backtab
  26176.     0Dh=PF13    1Dh=PA1        2Dh=Tab
  26177.     0Eh=PF14    1Eh=PA2        2Eh=Newline
  26178.     0Fh=PF15    1Fh=PA3        2Fh=Attn
  26179. ----------21A4-------------------------------
  26180. INT 21 - Attachmate Extra - GET HOST WINDOW BUFFER ADDRESS
  26181.     AH = A4h
  26182.     AL = window number (1-4=host B-E)
  26183. Return: DS:BX -> 3270 display buffer
  26184. SeeAlso: AH=A5h,AH=B8h
  26185. ----------21A5-------------------------------
  26186. INT 21 - Attachmate Extra - GET HOST WINDOW CURSOR POSITION
  26187.     AH = A5h
  26188.     AL = window number (1-4=host B-E)
  26189. Return: BX = cursor position (80 * row + column, where 0:0 is upper left)
  26190. Note:    if the host window is configured with the Extended Attribute (EAB)
  26191.       feature, multiply the cursor position by 2 to obtain the byte offset
  26192.       into the display buffer
  26193. SeeAlso: AH=A4h
  26194. ----------21A55A-----------------------------
  26195. INT 21 - VIRUS - "Eddie-2" - INSTALLATION CHECK
  26196.     AX = A55Ah
  26197. Return: AX = 5AA5h if resident
  26198. SeeAlso: AX=A1D5h,AX=AA00h
  26199. ----------21AA00-----------------------------
  26200. INT 21 - VIRUS - "Blinker" - INSTALLATION CHECK
  26201.     AX = AA00h
  26202. Return: AX = 00AAh if resident
  26203. SeeAlso: AX=A55Ah,AX=AA03h
  26204. ----------21AA03-----------------------------
  26205. INT 21 - VIRUS - "Backtime" - INSTALLATION CHECK
  26206.     AX = AA03h
  26207. Return: AX = 03AAh if resident
  26208. SeeAlso: AX=AA00h,AH=ABh
  26209. ----------21AB-------------------------------
  26210. INT 21 - VIRUS - "600" or "Voronezh"-family - INSTALLATION CHECK
  26211.     AH = ABh
  26212. Return: AX = 5555h if resident
  26213. SeeAlso: AX=AA03h,AX=BBBBh"VIRUS"
  26214. ----------21AF-------------------------------
  26215. INT 21 - Attachmate Extra - GET TRANSLATE TABLE ADDRESS
  26216.     AH = AFh
  26217. Return: DS:BX -> translate tables (see below)
  26218.  
  26219. Format of translate tables:
  26220. Offset    Size    Description
  26221.  00h 256 BYTEs    ASCII to 3270 buffer code translate table
  26222. 100h 256 BYTEs    3270 buffer code to ASCII translate table
  26223. 200h 256 BYTEs    3270 buffer code to EBCDIC translate table
  26224. 300h 256 BYTEs    EBCDIC to 3270 buffer code translate table
  26225. ----------21B5-------------------------------
  26226. INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
  26227.     AH = B5h
  26228.     AL = subfunction
  26229.         03h get task mode
  26230.         Return: AH = 00h
  26231.             AL = current task mode byte
  26232.         04h get task mode pointer
  26233.         Return: ES:BX -> task mode byte
  26234. Notes:    the task mode byte specifies how task cleanup should be performed, but
  26235.       is declared to be version-dependent
  26236.     allows a program to disable the automatic cleanup for programs managing
  26237.       task swapping, etc.
  26238.  
  26239. Values for task mode byte in version 3.01:
  26240.  00h-03h reserved
  26241.  04h     no task cleanup
  26242. ----------21B6-------------------------------
  26243. INT 21 - Novell NetWare - FILE SERVICES - EXTENDED FILE ATTRIBUTES
  26244.     AH = B6h
  26245.     AL = subfunction
  26246.         00h get extended file attributes
  26247.         01h set extended file attributes
  26248.         CL = extended file attributes (see below)
  26249.     DS:DX -> ASCIZ pathname (max 255 bytes)
  26250. Return: CF set on error
  26251.         AL = error code
  26252.         8Ch caller lacks privileges
  26253.         FEh not permitted to search directory
  26254.         FFh file not found
  26255.     CF clear if successful
  26256.         AL = 00h (success)
  26257.         CL = current extended file attributes (see below)
  26258. Note:    this function is supported by Advanced NetWare 2.1+
  26259. SeeAlso: AX=4300h,AH=E3h/SF=0Fh
  26260.  
  26261. Bitmask of extended file attributes:
  26262.  bits 2-0: search mode (executables only)
  26263.     000 none (use shell's default search)
  26264.     001 search on all opens without path
  26265.     010 do not search
  26266.     011 search on read-only opens without path
  26267.     100 reserved
  26268.     101 search on all opens
  26269.     110 reserved
  26270.     111 search on all read-only opens
  26271.  bit 3: reserved
  26272.  bit 4: transactions on file tracked
  26273.  bit 5: file's FAT indexed
  26274.  bit 6: read audit (to be implemented)
  26275.  bit 7: write audit (to be implemented)
  26276. ----------21B8-------------------------------
  26277. INT 21 - Attachmate Extra - DISABLE HOST BUFFER UPDATES
  26278.     AH = B8h
  26279.     AL = window number (1-4=host B-E)
  26280.     DL = 01h
  26281. Notes:    only valid in CUT mode
  26282.     next AID keystroke (eg Enter) enables host buffer updates
  26283. SeeAlso: AH=A4h
  26284. ----------21B800-----------------------------
  26285. INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT CAPTURE FLAGS
  26286.     AX = B800h
  26287.     CX = size of reply buffer (01h-3Fh)
  26288.     ES:BX -> reply buffer for capture flags table (see below)
  26289. Return: AL = status
  26290.         00h successful
  26291. Note:    this function is supported by Advanced NetWare 2.0+
  26292. SeeAlso: AX=B801h,AX=B802h,AH=DFh/DL=00h,AH=DFh/DL=04h
  26293.  
  26294. Format of capture flags table:
  26295. Offset    Size    Description
  26296.  00h    BYTE    status (used internally, should be set to 00h)
  26297.  01h    BYTE    print flags
  26298.         bit 2: print capture file if interrupted by loss of connection
  26299.             3: no automatic form feed after print job
  26300.             6: printing control sequences interpreted by print service
  26301.             7: print banner page before capture file
  26302.  02h    BYTE    tab size (01h-12h, default 08h)
  26303.  03h    BYTE    printer number on server (00h-04h, default 00h)
  26304.  04h    BYTE    number of copies to print (00h-FFh, default 01h)
  26305.  05h    BYTE    form type required in printer (default 00h)
  26306.  06h    BYTE    reserved
  26307.  07h 13 BYTEs    text to be placed on banner page
  26308.  14h    BYTE    reserved
  26309.  15h    BYTE    default local printer (00h = LPT1)
  26310.  16h    WORD    timeout in clock ticks for flushing capture file on inactivity
  26311.         (big-endian)
  26312.         0000h = never timeout
  26313.  18h    BYTE    flush capture file on LPT close if nonzero
  26314.  19h    WORD    maximum lines per page (big-endian)
  26315.  1Bh    WORD    maximum characters per line (big-endian)
  26316.  1Dh 13 BYTEs    name of form required in printer
  26317.  2Ah    BYTE    LPT capture flag
  26318.         00h inactive, FFh LPT device is being captured
  26319.  2Bh    BYTE    file capture flag
  26320.         00h if no file specified, FFh if capturing to file
  26321.  2Ch    BYTE    timing out (00h if no timeout in effect, FFh if timeout counter
  26322.         running)
  26323.  2Dh    DWORD    address of printer setup string (big-endian)
  26324.  31h    DWORD    address of printer reset string (big-endian)
  26325.  35h    BYTE    target connection ID
  26326.  36h    BYTE    capture in progress if FFh
  26327.  37h    BYTE    job queued for printing if FFh
  26328.  38h    BYTE    print job valid if FFh
  26329.  39h    DWORD    bindery object ID of print queue if previous byte FFh
  26330.  3Dh    WORD    print job number (1-999) `````(big-endian)
  26331. ----------21B801-----------------------------
  26332. INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT CAPTURE FLAGS
  26333.     AX = B801h
  26334.     CX = size of buffer (01h-3Fh)
  26335.     ES:BX -> buffer containing capture flags table (see below)
  26336. Return: AL = status
  26337.         00h successful
  26338. Note:    this function is supported by Advanced NetWare 2.0+
  26339. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  26340. ----------21B802-----------------------------
  26341. INT 21 - Novell NetWare - PRINT SERVICES - GET SPECIFIC CAPTURE FLAGS
  26342.     AX = B802h
  26343.     CX = size of reply buffer (01h-3Fh)
  26344.     DH = LPT port (00h-02h)
  26345.     ES:BX -> reply buffer for capture flags table (see AX=B800h)
  26346. Return: AL = status
  26347.         00h successful
  26348. Note:    this function is supported by Advanced NetWare 2.1+
  26349. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  26350. ----------21B803-----------------------------
  26351. INT 21 - Novell NetWare - PRINT SERVICES - SET SPECIFIC CAPTURE FLAGS
  26352.     AX = B803h
  26353.     CX = size of buffer (01h-3Fh)
  26354.     DH = LPT port (00h-02h)
  26355.     ES:BX -> buffer containing capture flags table (see below)
  26356. Return: AL = status
  26357.         00h successful
  26358. Note:    this function is supported by Advanced NetWare 2.1+
  26359. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  26360. ----------21B804-----------------------------
  26361. INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT LOCAL PRINTER
  26362.     AX = B804h
  26363. Return: DH = default LPT port (00h-02h)
  26364. Note:    this function is supported by Advanced NetWare 2.1+
  26365. SeeAlso: AX=B800h,AX=B805h,AH=DFh/DL=00h
  26366. ----------21B805-----------------------------
  26367. INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT LOCAL PRINTER
  26368.     AX = B805h
  26369.     DH = new default LPT port (00h-02h)
  26370. Return: AL = status
  26371.         00h successful
  26372. Note:    this function is supported by Advanced NetWare 2.1+
  26373. SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=00h
  26374. ----------21B806-----------------------------
  26375. INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT QUEUE
  26376.     AX = B806h
  26377.     DH = LPT port (00h-02h)
  26378.     BX:CX = print queue's object ID
  26379. Return: AL = status
  26380.         00h successful
  26381.         FFh job already set
  26382. Desc:    specify the print queue on which a print job is to be placed the next
  26383.       time a capture is started on the given printer port
  26384. Note:    this function is supported by Advanced NetWare 2.1+
  26385. SeeAlso: AX=B801h,AX=B807h,AX=E009h
  26386. ----------21B807-----------------------------
  26387. INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT JOB
  26388.     AX = B807h
  26389.     DH = LPT port (00h-02h)
  26390.     BX = job number (see AH=E3h/SF=68h)
  26391.     SI:DI:CX = NetWare file handle (see AH=E3h/SF=68h)
  26392. Return: AL = status
  26393.         00h successful
  26394.         FFh job already queued
  26395. Desc:    specify the capture file and print job to be used for subsequent
  26396.       output to the given printer port
  26397. Note:    this function is supported by Advanced NetWare 2.1+
  26398. SeeAlso: AX=B801h,AX=B806h,AX=E009h,AH=E3h/SF=68h
  26399. ----------21B808-----------------------------
  26400. INT 21 - Novell NetWare - PRINT SERVICES - GET BANNER USER NAME
  26401.     AX = B808h
  26402.     ES:BX -> 12-byte buffer for user name
  26403. Return: AL = status
  26404.         00h successful
  26405. Desc:    get the user name which is printed on the banner page
  26406. Notes:    this function is supported by Advanced NetWare 2.1+
  26407.     the default name is the login name of the user
  26408. SeeAlso: AX=B809h
  26409. ----------21B809-----------------------------
  26410. INT 21 - Novell NetWare - PRINT SERVICES - GET BANNER USER NAME
  26411.     AX = B809h
  26412.     ES:BX -> 12-byte buffer containing user name
  26413. Return: AL = status
  26414.         00h successful
  26415. Desc:    specify the user name which is printed on the banner page
  26416. Notes:    this function is supported by Advanced NetWare 2.1+
  26417.     the default name is the login name of the user
  26418. SeeAlso: AX=B808h
  26419. ----------21BB-------------------------------
  26420. INT 21 - Novell NetWare - WORKSTATION - SET END OF JOB STATUS
  26421.     AH = BBh
  26422.     AL = new EOJ flag
  26423.         00h disable EOJs
  26424.         01h enable EOJs
  26425. Return: AL = old EOJ flag
  26426. Desc:    specify whether the network shell should automatically generate an
  26427.       End of Job call when the root command processor regains control
  26428. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  26429.       Alloy NTNX
  26430. SeeAlso: AH=D6h
  26431. ----------21BBBB-----------------------------
  26432. INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK
  26433.     AX = BBBBh
  26434. Return: AX = 6969h
  26435. SeeAlso: AH=ABh"VIRUS",AH=BEh"VIRUS"
  26436. ----------21BC-------------------------------
  26437. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG PHYSICAL RECORD
  26438.     AH = BCh
  26439.     AL = flags
  26440.         bit 0: lock as well as log record
  26441.         1: non-exclusive lock
  26442.     BX = file handle
  26443.     CX:DX = starting offset in file
  26444.     SI:DI = length of region to lock
  26445.     BP = timeout in timer ticks (1/18 sec)
  26446.         0000h = don't wait if already locked
  26447. Return: AL = status
  26448.         00h successful
  26449.         96h no dynamic memory for file
  26450.         FEh timed out
  26451.         FFh failed
  26452. Desc:    add the specified physical record to the log table, optionally locking
  26453.       it
  26454. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26455.       Alloy NTNX
  26456. SeeAlso: AH=5Ch,AH=BDh,AH=BEh,AH=BFh,AH=C2h,AH=D0h
  26457. ----------21BD-------------------------------
  26458. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYSICAL RECORD
  26459.     AH = BDh
  26460.     BX = file handle
  26461.     CX:DX = starting offset in file
  26462.     SI:DI = length of record
  26463. Return: AL = status
  26464.         00h successful
  26465.         FFh record not locked
  26466. Desc:    unlock the specified physical record but do not remove it from log
  26467.       table
  26468. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26469.       Alloy NTNX
  26470. SeeAlso: AH=BCh,AH=BEh"NetWare",AH=C0h,AH=C3h,AH=D2h
  26471. ----------21BE-------------------------------
  26472. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD
  26473.     AH = BEh
  26474.     BX = file handle
  26475.     CX:DX = starting offset within file
  26476.     SI:DI = record length in bytes
  26477. Return: AL = status
  26478.         00h successful
  26479.         FFh specified record not locked
  26480. Desc:    unlock the physical record and remove it from the log table
  26481. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26482.       Alloy NTNX
  26483. SeeAlso: AH=5Ch,AH=BCh,AH=BDh,AH=C1h,AH=C4h,AH=D4h
  26484. ----------21BE-------------------------------
  26485. INT 21 - VIRUS - "Datalock" - INSTALLATION CHECK
  26486.     AH = BEh
  26487. Return: AX = 1234h if resident
  26488. SeeAlso: AX=BBBBh,AX=BE00h
  26489. ----------21BE00-----------------------------
  26490. INT 21 - VIRUS - "USSR-1049" - INSTALLATION CHECK
  26491.     AX = BE00h
  26492.     CF set
  26493. Return: CF clear if resident
  26494. SeeAlso: AH=BEh"VIRUS",AH=C0h"VIRUS"
  26495. ----------21BF-------------------------------
  26496. INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK RECORD (FCB)
  26497.     AH = BFh
  26498.     AL = flags
  26499.         bit 0: lock as well as log record
  26500.         1: non-exclusive lock
  26501.     DS:DX -> opened FCB (see AH=0Fh)
  26502.     BX:CX = offset
  26503.     BP = lock timeout in timer ticks (1/18 sec)
  26504.     SI:DI = length
  26505. Return: AL = error code (see AH=BCh)
  26506. SeeAlso: AH=BCh,AH=C0h"NetWare",AH=C2h"NetWare"
  26507. ----------21C0-------------------------------
  26508. INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE RECORD (FCB)
  26509.     AH = C0h
  26510.     DS:DX -> FCB (see AH=0Fh)
  26511.     BX:CX = offset
  26512. Return: AL = error code (see AH=BCh)
  26513. Note:    unlocks record but does not remove it from log table
  26514. SeeAlso: AH=BDh,AH=BFh,AH=C1h"NetWare",AH=C3h
  26515. ----------21C0-------------------------------
  26516. INT 21 - VIRUS - "Slow"/"Zerotime", "Solano" - INSTALLATION CHECK
  26517.     AH = C0h
  26518. Return: AX = 0300h if "Slow"/"Zerotime" resident
  26519.     AX = 1234h if "Solano" resident
  26520. SeeAlso: AX=BE00h,AH=C1h"VIRUS",AX=C301h"VIRUS"
  26521. ----------21C1-------------------------------
  26522. INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR RECORD (FCB)
  26523.     AH = C1h
  26524.     DS:DX -> opened FCB (see AH=0Fh)
  26525.     BX:CX = offset
  26526. Return: AL = error code (see AH=BCh)
  26527. Note:    unlocks record and removes it from log table
  26528. SeeAlso: AH=BEh,AH=C0h"NetWare",AH=C4h
  26529. ----------21C1-------------------------------
  26530. INT 21 - VIRUS - "Solano" - ???
  26531.     AH = C1h
  26532.     ???
  26533. Return: ???
  26534. SeeAlso: AH=C0h"VIRUS"
  26535. ----------21C2-------------------------------
  26536. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK PHYSICAL RECORD SET
  26537.     AH = C2h
  26538.     AL = flags
  26539.         bit 1: non-exclusive lock
  26540.     BP = lock timeout in timer ticks (1/18 sec) 0000h = no wait
  26541. Return: AL = status
  26542.         00h successful
  26543.         FEh timed out
  26544.         FFh failed
  26545. Desc:    attempt to lock all physical records listed in the log table
  26546. Notes:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26547.       Alloy NTNX
  26548.     status FFh will be retuend if one or more physical records have been
  26549.       exclusively locked by another process
  26550. SeeAlso: AH=BFh,AH=C3h,AH=D1h
  26551. ----------21C2-------------------------------
  26552. INT 21 - VIRUS - "Scott's Valley" - ???
  26553.     AH = C2h
  26554.     ???
  26555. Return: ???
  26556. SeeAlso: AH=C0h"VIRUS"
  26557. ----------21C3-------------------------------
  26558. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYSICAL RECRD SET
  26559.     AH = C3h
  26560. Desc:    unlock all currently-locked physical records in the log table, but do
  26561.       not remove them from the table
  26562. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26563.       Alloy NTNX
  26564. SeeAlso: AH=BDh,AH=C0h,AH=C2h"NetWare",AH=C4h,AH=D3h
  26565. ----------21C301DXF1F1-----------------------
  26566. INT 21 - VIRUS - "905"/"Backfont" - INSTALLATION CHECK
  26567.     AX = C301h
  26568.     DX = F1F1h
  26569. Return: DX = 0E0Eh if resident
  26570. SeeAlso: AH=C0h"VIRUS",AX=C500h"VIRUS"
  26571. ----------21C4-------------------------------
  26572. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD SET
  26573.     AH = C4h
  26574. Desc:    unlock all physical records in the log table and remove them from the
  26575.       log table
  26576. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26577.       Alloy NTNX
  26578. SeeAlso: AH=BEh,AH=C1h,AH=D5h
  26579. ----------21C500-----------------------------
  26580. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - OPEN SEMAPHORE
  26581.     AX = C500h
  26582.     DS:DX -> semaphore name (counted string, max 127 bytes)
  26583.     CL = initial value for semaphore
  26584. Return: AL = status
  26585.         00h successful
  26586.         BL = number of processes having semaphore open
  26587.         CX:DX = semaphore handle
  26588.         FEh invalid name length
  26589.         FFh invalid semaphore value
  26590. Notes:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26591.       Alloy NTNX
  26592.     the semaphore's value is incremented by AX=C503h and decremented by
  26593.       AX=C502h
  26594. SeeAlso: AX=C501h,AX=C502h,AX=C503h,AX=C504h
  26595. ----------21C500-----------------------------
  26596. INT 21 - VIRUS - "Sverdlov" - INSTALLATION CHECK
  26597.     AX = C500h
  26598. Return: AX = 6731h if resident
  26599. SeeAlso: AX=C301h"VIRUS",AH=C6h"VIRUS"
  26600. ----------21C501-----------------------------
  26601. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - EXAMINE SEMAPHORE
  26602.     AX = C501h
  26603.     CX:DX = semaphore handle
  26604. Return: AL = status
  26605.         00h successful
  26606.         CX = semaphore value (-127 to 127)
  26607.         DL = count of processes which have the semaphore open
  26608.         FFh invalid handle
  26609. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26610.       Alloy NTNX
  26611. SeeAlso: AX=C500h"NetWare",AX=C502h,AX=C504h
  26612. ----------21C502-----------------------------
  26613. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - WAIT ON SEMAPHORE
  26614.     AX = C502h
  26615.     CX:DX = semaphore handle
  26616.     BP = timeout limit in timer ticks (1/18 sec)
  26617.         0000h return immediately if semaphore already zero or negative
  26618. Return: AL = status
  26619.         00h successful
  26620.         FEh timeout
  26621.         FFh invalid handle
  26622. Desc:    decrement the semaphore's value, optionally waiting until its value
  26623.       becomes positive before decrementing
  26624. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26625.       Alloy NTNX
  26626. SeeAlso: AX=C500h"NetWare",AX=C501h,AX=C503h
  26627. ----------21C503-----------------------------
  26628. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - SIGNAL SEMAPHORE
  26629.     AX = C503h
  26630.     CX:DX = semaphore handle
  26631. Return: AL = status
  26632.         00h successful
  26633.         01h semaphore value overflowed
  26634.         FFh invalid handle
  26635. Desc:    increment the semaphore's value and signal the first process (if any)
  26636.       in the queue waiting on the semaphore
  26637. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26638.       Alloy NTNX
  26639. SeeAlso: AX=C500h"NetWare",AX=C502h
  26640. ----------21C504-----------------------------
  26641. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLOSE SEMAPHORE
  26642.     AX = C504h
  26643.     CX:DX = semaphore handle
  26644. Return: AL = status
  26645.         00h successful
  26646.         FFh invalid handle
  26647. Desc:    decrement the semaphore's open count, and delete the semaphore if the
  26648.       count reaches zero
  26649. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26650.       Alloy NTNX
  26651. SeeAlso: AX=C500h"NetWare",AX=C501h
  26652. ----------21C6-------------------------------
  26653. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - GET OR SET LOCK MODE
  26654.     AH = C6h
  26655.     AL = subfunction
  26656.         00h set old "compatibility" mode (default)
  26657.         01h set new extended locks mode 
  26658.         02h get lock mode
  26659. Return: AL = current lock mode
  26660. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  26661.       Alloy NTNX
  26662.     the locking mode should be 01h for NetWare 4.61+ and Advanced
  26663.       NetWare 1.0+ locking calls, and 00h for all older calls
  26664. SeeAlso: AH=BCh,AH=C4h,AH=D0h
  26665. ----------21C6-------------------------------
  26666. INT 21 - VIRUS - "Socha" - INSTALLATION CHECK
  26667.     AH = C6h
  26668. Return: AL = 55h if resident
  26669. SeeAlso: AX=C500h"VIRUS",AX=C603h
  26670. ----------21C603-----------------------------
  26671. INT 21 - VIRUS - "Yankee" or "MLTI" - INSTALLATION CHECK
  26672.     AX = C603h
  26673.     CF set
  26674. Return: CF clear if resident
  26675. SeeAlso: AX=C500h"VIRUS",AX=C700h"VIRUS"
  26676. ----------21C700-----------------------------
  26677. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - BEGIN TRANSACTION
  26678.     AX = C700h
  26679. Return: CF clear if successful
  26680.         AL = 00h
  26681.     CF set on error
  26682.         AL = error code
  26683.         96h out of memory
  26684.         FEh implicit transaction already active, converted to explicit
  26685.         FFh explicit transaction already active
  26686. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26687. SeeAlso: AX=C701h,AX=C702h,AX=C703h
  26688. ----------21C700-----------------------------
  26689. INT 21 - VIRUS - "MH-757" - INSTALLATION CHECK
  26690.     AX = C700h
  26691. Return: AL = 07h if resident
  26692. SeeAlso: AX=C603h"VIRUS",AH=CBh"VIRUS"
  26693. ----------21C701-----------------------------
  26694. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - END TRANSACTION
  26695.     AX = C701h
  26696. Return: AL = status
  26697.         00h successful
  26698.         CX:DX = transaction number
  26699.         FDh transaction tracking disabled
  26700.         FEh transaction ended records locked
  26701.         FFh no explicit transaction active
  26702.     CF clear except when AL=FFh
  26703. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26704. SeeAlso: AX=C700h"NetWare",AX=C703h
  26705. ----------21C702-----------------------------
  26706. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - INSTALLATION CHECK
  26707.     AX = C702h
  26708. Return: AL = status
  26709.         00h not available
  26710.         01h available
  26711.         FDh available but disabled
  26712. Desc:    determine whether the default file server supports TTS
  26713. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26714. ----------21C703-----------------------------
  26715. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - ABORT TRANSACTION
  26716.     AX = C703h
  26717. Return: CF clear if successful
  26718.         AL = 00h
  26719.     CF set on error
  26720.         AL = error code
  26721.         FDh transaction tracking disabled, no backout
  26722.         FEh transaction ended records locked
  26723.         FFh no explicit transaction active
  26724. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26725. SeeAlso: AX=C700h"NetWare",AX=C701h,AX=C704h
  26726. ----------21C704-----------------------------
  26727. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - TRANSACTION STATUS
  26728.     AX = C704h
  26729.     CX:DX = transaction number (see AX=C701h)
  26730. Return: AL = status
  26731.         00h successful
  26732.         FFh not yet written to disk
  26733. Desc:    verify that a transaction has actually been written to disk
  26734. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26735.     transactions are written to disk in the order in which they are ended,
  26736.       but it may take as much as five seconds for the data to be written
  26737. SeeAlso: AX=C700h"NetWare",AX=C701h,AX=C703h
  26738. ----------21C705-----------------------------
  26739. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - GET APPLICTN THRESHOLDS
  26740.     AX = C705h
  26741. Return: AL = status
  26742.         00h successful
  26743.     CL = maximum logical record locks (default 0)
  26744.     CH = maximum physical record locks (default 0)
  26745. Desc:    get the per-application limits on record locks allowed before an
  26746.       implicit transaction is begun
  26747. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26748.     if either limit is FFh, implicit transactions are disabled for the
  26749.       corresponding lock type
  26750. SeeAlso: AX=C706h,AX=C707h
  26751. ----------21C706-----------------------------
  26752. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - SET APPLICTN THRESHOLDS
  26753.     AX = C706h
  26754.     CL = maximum logical record locks (default 0)
  26755.     CH = maximum physical record locks (default 0)
  26756. Return: AL = status
  26757.         00h successful
  26758. Desc:    specify the per-application limits on record locks allowed before an
  26759.       implicit transaction is begun
  26760. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26761.     if either limit is set to FFh, implicit transactions are disabled for
  26762.       the corresponding lock type
  26763. SeeAlso: AX=C705h,AX=C708h
  26764. ----------21C707-----------------------------
  26765. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - GET WORKSTN THRESHOLDS
  26766.     AX = C707h
  26767. Return: AL = status
  26768.         00h successful
  26769.     CL = maximum logical record locks (default 0)
  26770.     CH = maximum physical record locks (default 0)
  26771. Desc:    get the per-workstation limits on record locks allowed before an
  26772.       implicit transaction is begun
  26773. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26774.     if either limit is FFh, implicit transactions are disabled for the
  26775.       corresponding lock type
  26776. SeeAlso: AX=C705h,AX=C708h
  26777. ----------21C708-----------------------------
  26778. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - SET WORKSTN THRESHOLDS
  26779.     AX = C708h
  26780.     CL = maximum logical record locks (default 0)
  26781.     CH = maximum physical record locks (default 0)
  26782. Return: AL = status
  26783.         00h successful
  26784. Desc:    specify the per-workstation limits on record locks allowed before an
  26785.       implicit transaction is begun
  26786. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  26787.     if either limit is set to FFh, implicit transactions are disabled for
  26788.       the corresponding lock type
  26789. SeeAlso: AX=C706h,AX=C707h
  26790. ----------21C8-------------------------------
  26791. INT 21 - Novell NetWare 4.0 - BEGIN LOGICAL FILE LOCKING
  26792.     AH = C8h
  26793.     if function C6h lock mode 00h:
  26794.         DL = mode
  26795.         00h no wait
  26796.         01h wait
  26797.     if function C6h lock mode 01h:
  26798.         BP = timeout in timer ticks (1/18 sec)
  26799. Return: AL = error code
  26800. SeeAlso: AH=C9h
  26801. ----------21C9-------------------------------
  26802. INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING
  26803.     AH = C9h
  26804. Return: AL = error code
  26805. SeeAlso: AH=C8h
  26806. ----------21CA-------------------------------
  26807. INT 21 - Novell NetWare 4.0, Alloy NTNX - LOG/LOCK PERSONAL FILE (FCB)
  26808.     AH = CAh
  26809.     DS:DX -> FCB (see AH=0Fh)
  26810.     if function C6h lock mode 01h:
  26811.         AL = log and lock flag
  26812.         00h log file only
  26813.         01h lock as well as log file
  26814.         BP = lock timeout in timer ticks (1/18 sec)
  26815. Return: AL = error code
  26816.         00h successful
  26817.         96h no dynamic memory for file
  26818.         FEh timeout
  26819.         FFh failed
  26820. SeeAlso: AH=CBh
  26821. ----------21CA15-----------------------------
  26822. INT 21 - VIRUS - "Piter" - ???
  26823.     AX = CA15h
  26824.     ???
  26825. Return: ???
  26826. SeeAlso: AH=CCh"VIRUS"
  26827. ----------21CB-------------------------------
  26828. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK FILE SET
  26829.     AH = CBh
  26830.     if function C6h lock mode 00h:
  26831.         DL = mode
  26832.         00h no wait
  26833.         01h wait
  26834.     if function C6h lock mode 01h:
  26835.         BP = lock timeout in timer ticks (1/18 sec) 0000h = no wait
  26836. Return: AL = status
  26837.         00h successful
  26838.         FEh timed out
  26839.         FFh failed
  26840. Desc:    attempt to lock all files listed in the log table
  26841. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  26842.       Alloy NTNX
  26843.     status FFh will be returned if one or more of the files have already
  26844.       been exclusively locked by another process
  26845. SeeAlso: AH=CAh,AH=CDh,AH=D1h,AH=EBh
  26846. ----------21CB-------------------------------
  26847. INT 21 - VIRUS - "Milous" - INSTALLATION CHECK
  26848.     AH = CBh
  26849. Return: AL = 07h if resident
  26850. SeeAlso: AX=C700h"VIRUS",AX=CB02h
  26851. ----------21CB02-----------------------------
  26852. INT 21 - VIRUS - "Witcode" - INSTALLATION CHECK
  26853.     AX = CB02h
  26854. Return: AX = 02CBh if resident
  26855. SeeAlso: AH=CBh"VIRUS",AH=CCh"VIRUS"
  26856. ----------21CC-------------------------------
  26857. INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE (FCB)
  26858.     AH = CCh
  26859.     DS:DX -> FCB (see AH=0Fh)
  26860. Return: none
  26861. Note:    unlocks file, but does not remove it from the log table or close it
  26862. SeeAlso: AH=CAh,AH=CDh
  26863. ----------21CC-------------------------------
  26864. INT 21 - VIRUS - "Westwood" - INSTALLATION CHECK
  26865.     AH = CCh
  26866. Return: AX = 0700h if resident
  26867. SeeAlso: AX=CB02h,AH=CDh"VIRUS",AX=D000h"VIRUS"
  26868. ----------21CD-------------------------------
  26869. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE FILE SET
  26870.     AH = CDh
  26871. Return: none
  26872. Desc:    unlock all files listed in the log table, but don't remove them from
  26873.       the table
  26874. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  26875.       Alloy NTNX
  26876. SeeAlso: AH=CBh,AH=CCh,AH=CFh,AH=D3h
  26877. ----------21CD-------------------------------
  26878. INT 21 - VIRUS - "Westwood" - ???
  26879.     AH = CDh
  26880.     ???
  26881. Return: ???
  26882. SeeAlso: AH=CCh"VIRUS"
  26883. ----------21CE-------------------------------
  26884. INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE (FCB)
  26885.     AH = CEh
  26886.     DS:DX -> FCB (see AH=0Fh)
  26887. Return: AL = error code
  26888. Note:    unlocks file and removes it from log table, then closes all opened and
  26889.       logged occurrences
  26890. SeeAlso: AH=CAh,AH=CFh,AH=EDh"NetWare"
  26891. ----------21CF-------------------------------
  26892. INT 21 - LANstep - ???
  26893.     AH = CFh
  26894.     ???
  26895. Return: ???
  26896. Note:    LANstep is a redesign of the Waterloo Microsystems PORT network
  26897. ----------21CF-------------------------------
  26898. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR FILE SET
  26899.     AH = CFh
  26900. Return: AL = 00h
  26901. Desc:    unlock and remove all files from log table
  26902. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  26903.       Alloy NTNX
  26904. SeeAlso: AH=CAh,AH=CEh,AH=EBh"NetWare"
  26905. ----------21D0-------------------------------
  26906. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG LOGICAL RECORD
  26907.     AH = D0h
  26908.     DS:DX -> record string (counted string, max 99 data bytes)
  26909.     if function C6h lock mode 01h: (Novell, NTNX only)
  26910.         AL = flags
  26911.         bit 0: lock as well as log the record
  26912.         bit 1: non-exclusive lock
  26913.         BP = lock timeout in timer ticks (1/18 sec)
  26914. Return: AL = status
  26915.         00h successful
  26916.         96h no dynamic memory for file
  26917.         FEh timed out
  26918.         FFh unsuccessful
  26919. Desc:    add the specified logical record name to the log table, and optionally
  26920.       lock the record
  26921. Notes:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+,
  26922.       Banyan VINES, and Alloy NTNX
  26923.     locks on logical record names are advisory and may be ignored by other
  26924.       applications
  26925. SeeAlso: AH=BCh,AH=D1h,AH=D2h,AH=D4h,AH=EBh
  26926. ----------21D000-----------------------------
  26927. INT 21 - VIRUS - "Fellowship" - INSTALLATION CHECK
  26928.     AX = D000h
  26929. Return: BX = 1234h if resident
  26930. SeeAlso: AH=CCh"VIRUS",AH=D5h"VIRUS",AX=D5AAh
  26931. ----------21D1-------------------------------
  26932. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK LOGICAL RECORD SET
  26933.     AH = D1h
  26934.     AL = lock type (00h exclusive, 01h shareable)
  26935.     if function C6h lock mode 00h:
  26936.         DL = mode
  26937.         00h no wait
  26938.         01h wait
  26939.     if function C6h lock mode 01h: (Novell only)
  26940.        BP = lock timeout in timer ticks (1/18 sec) 0000h = no wait
  26941.         0000h no wait
  26942. Return: AL = status (see AH=CBh)
  26943. Desc:    attempt to lock all logical record names listed in the log table
  26944. Notes:    this function is supported by NetWare 4.6+, Advanced Netware 1.0+,
  26945.       Banyan VINES, and Alloy NTNX
  26946.     status FFh will be returned if one or more logical records have been
  26947.       exclusively locked by another process
  26948.     locks on logical record names are advisory and may be ignored by other
  26949.       applications
  26950. SeeAlso: AH=C2h,AH=CBh,AH=D0h,AH=D3h,AH=D5h
  26951. ----------21D2-------------------------------
  26952. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE LOGICAL RECORD
  26953.     AH = D2h
  26954.     DS:DX -> semaphore identifier (counted string up to 99 chars long)
  26955. Return: AL = status
  26956.         00h successful
  26957.         FFh no such record
  26958. Desc:    unlock the logical record name but do not remove it from the log table
  26959. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  26960.       Banyan VINES, and Alloy NTNX
  26961.     locks on logical record names are advisory and may be ignored by other
  26962.       applications
  26963. SeeAlso: AH=BDh,AH=D0h,AH=D3h,AH=D4h
  26964. ----------21D3-------------------------------
  26965. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE LOGICAL RECORD SET
  26966.     AH = D3h
  26967. Desc:    unlock all currently-locked logical record names in the log table, but
  26968.       do not remove them from the table
  26969. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  26970.       Banyan VINES, and Alloy NTNX
  26971.     locks on logical record names are advisory and may be ignored by other
  26972.       applications
  26973. SeeAlso: AH=C3h,AH=CDh,AH=D1h,AH=D2h,AH=D5h
  26974. ----------21D4-------------------------------
  26975. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR LOGICAL RECORD
  26976.     AH = D4h
  26977.     DS:DX -> logical record name (counted string up to 99 chars long)
  26978. Return: AL = status
  26979.         00h successful
  26980.         FFh no such record name
  26981. Desc:    unlock and remove the logical record name from the log table
  26982. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  26983.       Banyan VINES, and Alloy NTNX
  26984.     locks on logical record names are advisory and may be ignored by other
  26985.       applications
  26986. SeeAlso: AH=BEh,AH=D0h,AH=D2h,AH=D5h
  26987. ----------21D5-------------------------------
  26988. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR LOGICAL RECORD SET
  26989.     AH = D5h
  26990. Return: AL = error code (see AH=D4h)
  26991. Desc:    unlock and remove all logical record name from the log table
  26992. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  26993.       Banyan VINES, and Alloy NTNX
  26994.     locks on logical record names are advisory and may be ignored by other
  26995.       applications
  26996. SeeAlso: AH=D1h,AH=D3h,AH=D4h
  26997. ----------21D5-------------------------------
  26998. INT 21 - VIRUS - "Carfield" - ???
  26999.     AH = D5h
  27000.     ???
  27001. Return: ???
  27002. SeeAlso: AX=D5AAh,AH=F3h"Carfield"
  27003. ----------21D5AA-----------------------------
  27004. INT 21 - VIRUS - "Diamond-A", "Diamond-B" - INSTALLATION CHECK
  27005.     AX = D5AAh
  27006. Return: AX = 2A55h if "Diamond-A" resident
  27007.     AX = 2A03h if "Diamond-B"-family virus resident
  27008. SeeAlso: AX=D000h,AH=D5h"VIRUS",AX=D5AAh/BP=DEAAh
  27009. ----------21D5AABPDEAA-----------------------
  27010. INT 21 - VIRUS - "Dir" - INSTALLATION CHECK
  27011.     AX = D5AAh
  27012.     BP = DEAAh
  27013. Return: SI = 4321h if resident
  27014. SeeAlso: AX=D5AAh,AX=DADAh"VIRUS"
  27015. ----------21D6-------------------------------
  27016. INT 21 - Novell NetWare - WORKSTATION - END OF JOB
  27017.     AH = D6h
  27018.     BX = job flag (0000h current job, FFFFh all processes on workstation)
  27019. Return: AL = error code
  27020. Desc:    unlocks and clears all locked or logged files and records held by the
  27021.       process(es), closes all files, resets error and lock modes, and
  27022.       releases all network resources
  27023. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27024.       Alloy NTNX
  27025. SeeAlso: AH=BBh,AH=D7h
  27026. ----------21D7-------------------------------
  27027. INT 21 - Novell NetWare - CONNECTION SERVICES - SYSTEM LOGOUT
  27028.     AH = D7h
  27029. Return: AL = error code
  27030. Desc:    this function closes the caller's open files, logs it out from all
  27031.       file servers, detaches the workstation from all non-default file
  27032.       servers, and maps a drive to the default server's SYS:LOGIN directory
  27033. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27034.       Alloy NTNX
  27035. SeeAlso: AH=D6h,AH=E3h/SF=14h,AH=F1h
  27036. ----------21D8-------------------------------
  27037. INT 21 - Novell NetWare, Banyan VINES - ALLOCATE RESOURCE
  27038.     AH = D8h
  27039.     DL = resource number
  27040. Return: AL = status
  27041.         00h successful
  27042.         FFh unsucessful
  27043. SeeAlso: AH=D9h
  27044. ----------21D9-------------------------------
  27045. INT 21 - Novell NetWare, Banyan VINES - DEALLOCATE RESOURCE
  27046.     AH = D9h
  27047.     DL = resource number
  27048. Return:    AL = status (see AH=D8h)
  27049. SeeAlso: AH=D8h
  27050. ----------21DA-------------------------------
  27051. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME INFO WITH NUMBER
  27052.     AH = DAh
  27053.     DL = volume number
  27054.     ES:DI -> reply buffer (see below)
  27055. Return: AL = 00h
  27056. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27057. SeeAlso: AH=36h,AH=E2h/SF=15h,AH=E3h/SF=E9h
  27058.  
  27059. Format of reply buffer:
  27060. Offset    Size    Description
  27061.  00h    WORD    sectors/block
  27062.  02h    WORD    total blocks on volume
  27063.  04h    WORD    unused blocks
  27064.  06h    WORD    total directory entries
  27065.  08h    WORD    unused directory entries
  27066.  0Ah 16 BYTEs    volume name, null padded
  27067.  1Ah    WORD    removable flag, 0000h = not removable
  27068. Note:    all words are big-endian
  27069. ----------21DADA-----------------------------
  27070. INT 21 - VIRUS - "Gotcha" - INSTALLATION CHECK
  27071.     AX = DADAh
  27072. Return: AH = A5h
  27073. SeeAlso: AX=D5AAh,AH=DAFEh"VIRUS"
  27074. ----------21DAFE-----------------------------
  27075. INT 21 - VIRUS - "Plovdiv 1.3" - INSTALLATION CHECK
  27076.     AX = DAFEh
  27077. Return: AX = 1234h if resident
  27078. SeeAlso: AX=DADAh,AH=DDh"VIRUS",AH=DEh"VIRUS"
  27079. ----------21DB-------------------------------
  27080. INT 21 - Novell NetWare - WORKSTATION - GET NUMBER OF LOCAL DRIVES
  27081.     AH = DBh
  27082. Return: AL = number of local disks as set by LASTDRIVE in CONFIG.SYS
  27083. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27084.       Alloy NTNX
  27085. SeeAlso: AH=0Eh
  27086. ----------21DC-------------------------------
  27087. INT 21 - Novell NetWare - CONNECTION SERVICES - GET CONNECTION NUMBER
  27088.     AH = DCh
  27089. Return: AL = logical connection number
  27090.         00h if NetWare not loaded or this machine is a non-dedicated server
  27091.     CX = station number in ASCII (CL = first digit)
  27092. Notes:    this function is supported by NetWare 4.0+, Banyan VINES, and Alloy
  27093.       NTNX
  27094.     station number only unique for those PCs connected to same semaphore
  27095.       service
  27096. ----------21DC-------------------------------
  27097. INT 21 - PCMag PCMANAGE/DCOMPRES - TURN ON/OFF
  27098.     AH = DCh
  27099.     DX = state
  27100.         0000h turn on
  27101.         0001h turn off
  27102. SeeAlso: AX=FEDCh
  27103. ----------21DD-------------------------------
  27104. INT 21 - Novell NetWare - WORKSTATION - SET NetWare ERROR MODE
  27105.     AH = DDh
  27106.     DL = error mode
  27107.         00h invoke INT 24 on critical I/O errors (default)
  27108.         01h return NetWare extended error code in AL
  27109.         02h return error code in AL, mapped to standard DOS error codes
  27110. Return: AL = previous error mode
  27111. Note:    this function is supported by Advanced NetWare 2.0+
  27112. SeeAlso: INT 24
  27113. ----------21DD-------------------------------
  27114. INT 21 - VIRUS - "Jerusalem"-family - RELOCATE VIRUS???
  27115.     AH = DDh
  27116.     CX = number of bytes to copy
  27117.     DS:SI -> source of copy
  27118.     ES:DI -> destination of copy
  27119. Return: does not return normally; return address is caller's CS:0100h with
  27120.       AX = ???
  27121. SeeAlso: AH=E0h"VIRUS",AH=EEh"VIRUS"
  27122. ----------21DE-------------------------------
  27123. INT 21 - VIRUS - "Durban" - INSTALLATION CHECK
  27124.     AH = DEh
  27125. Return: AH = DFh if resident
  27126. SeeAlso: AX=DAFEh,AX=DEDEh"VIRUS"
  27127. ----------21DE-------------------------------
  27128. INT 21 - VIRUS - "April 1st EXE" - ???
  27129.     AH = DEh
  27130.     ???
  27131. Return: ???
  27132. ----------21DE-------------------------------
  27133. INT 21 - Novell NetWare - MESSAGE SERVICES - SET BROADCAST MODE
  27134.     AH = DEh
  27135.     DL = broadcast mode
  27136.         00h receive server and workstation broadcasts (default)
  27137.         01h receive server broadcasts, discard user messages
  27138.         02h store server broadcasts for retrieval
  27139.         03h store all broadcasts for retrieval
  27140. Return: AL = new broadcast mode
  27141. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27142. ----------21DE--DL04-------------------------
  27143. INT 21 - Novell NetWare - MESSAGE SERVICES - GET BROADCAST MODE
  27144.     AH = DEh
  27145.     DL = 04h
  27146. Return: AL = current broadcast mode
  27147.         00h receive server and workstation broadcasts (default)
  27148.         01h receive server broadcasts, discard user message
  27149.         02h store server broadcasts for retrieval
  27150.         03h store all broadcasts for retrieval
  27151. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27152. ----------21DE-------------------------------
  27153. INT 21 - Novell NetWare 4.0 - SHELL TIMER INTERRUPT CHECKS
  27154.     AH = DEh
  27155.     DL = function
  27156.         05h disable shell timer interrupt checks
  27157.         06h enable shell timer interrupt checks
  27158. Return: ???
  27159. ----------21DEDE-----------------------------
  27160. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  27161.     AX = DEDEh
  27162. Return: AH = 41h if resident
  27163. SeeAlso: AH=DEh"VIRUS",AH=E0h"VIRUS"
  27164. ----------21DF--DL00-------------------------
  27165. INT 21 - Novell NetWare - PRINT SERVICES - START LPT CAPTURE
  27166.     AH = DFh
  27167.     DL = 00h
  27168. Return: AL = status
  27169.         00h successful
  27170. Desc:    this function redirects the default LPT to a capture file on the file
  27171.       server
  27172. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27173.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  27174.     a print job is queued when the first character of output is captured
  27175. SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=01h,AH=DFh/DL=02h,AH=DFh/DL=03h
  27176. SeeAlso: AH=DFh/DL=04h,AX=F003h
  27177. ----------21DF--DL01-------------------------
  27178. INT 21 - Novell NetWare - PRINT SERVICES - END LPT CAPTURE
  27179.     AH = DFh
  27180.     DL = 01h
  27181. Return: AL = status
  27182.         00h successful
  27183. Desc:    stop redirecting the default LPT, close the capture file, and release
  27184.       the job in the print queue for printing
  27185. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27186.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  27187.     after this call, the default LPT defaults to local printing
  27188. SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=02h,AH=DFh/DL=03h,AH=DFh/DL=05h
  27189. ----------21DF--DL02-------------------------
  27190. INT 21 - Novell NetWare - PRINT SERVICES - CANCEL LPT CAPTURE
  27191.     AH = DFh
  27192.     DL = 02h
  27193. Return: AL = status
  27194.         00h successful
  27195. Desc:    this function ends the capture of the default LPT, removes the job from
  27196.       the print queue, and deletes the capture file unless it is a
  27197.       permanent capture file
  27198. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27199.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  27200.     after this call, the default LPT defaults to local printing
  27201. SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=06h
  27202. ----------21DF--DL02-------------------------
  27203. INT 21 - Novell NetWare - PRINT SERVICES - FLUSH LPT CAPTURE
  27204.     AH = DFh
  27205.     DL = 03h
  27206. Return: AL = status
  27207.         00h successful
  27208. Desc:    this function closes the current capture file for the default LPT
  27209.       and starts printing it if it is not a permanent capture file
  27210. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27211.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  27212.     if more data is sent to the LPT port after this call, a new capture
  27213.       file will be opeend
  27214. SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=01h,AH=DFh/DL=02h,AH=DFh/DL=07h
  27215. ----------21DF--DL04-------------------------
  27216. INT 21 - Novell NetWare - PRINT SERVICES - START SPECIFIC LPT CAPTURE
  27217.     AH = DFh
  27218.     DL = 04h
  27219.     DH = LPT port (00h-02h)
  27220. Return: AL = status
  27221.         00h successful
  27222. Desc:    this function redirects the specified LPT to a capture file on the file
  27223.       server
  27224. Notes:    this function is supported by Advanced NetWare 2.1+
  27225.     a print job is queued when the first character of output is captured
  27226. SeeAlso: AX=B800h,AH=DFh/DL=00h,AH=DFh/DL=05h,AH=DFh/DL=06h,AH=DFh/DL=07h
  27227. SeeAlso: AX=F003h
  27228. ----------21DF--DL05-------------------------
  27229. INT 21 - Novell NetWare - PRINT SERVICES - END SPECIFIC LPT CAPTURE
  27230.     AH = DFh
  27231.     DL = 05h
  27232.     DH = LPT port (00h-02h)
  27233. Return: AL = status
  27234.         00h successful
  27235. Desc:    stop redirecting the specified LPT, close the capture file, and release
  27236.       the job in the print queue for printing
  27237. Notes:    this function is supported by Advanced NetWare 2.1+
  27238.     after this call, the specified LPT defaults to local printing
  27239. SeeAlso: AH=DFh/DL=01h,AH=DFh/DL=04h,AH=DFh/DL=06h,AH=DFh/DL=07h
  27240. ----------21DF--DL06-------------------------
  27241. INT 21 - Novell NetWare - PRINT SERVICES - CANCEL SPECIFIC LPT CAPTURE
  27242.     AH = DFh
  27243.     DL = 06h
  27244.     DH = LPT port (00h-02h)
  27245. Return: AL = status
  27246.         00h successful
  27247. Desc:    this function ends the capture of the specified LPT, removes the job
  27248.       from the print queue, and deletes the capture file unless it is a
  27249.       permanent capture file
  27250. Notes:    this function is supported by Advanced NetWare 2.1+
  27251.     after this call, the specified LPT defaults to local printing
  27252. SeeAlso: AH=DFh/DL=02h,AH=DFh/DL=04h,AH=DFh/DL=05h,AH=DFh/DL=07h
  27253. ----------21DF--DL07-------------------------
  27254. INT 21 - Novell NetWare - PRINT SERVICES - FLUSH SPECIFIC LPT CAPTURE
  27255.     AH = DFh
  27256.     DL = 07h
  27257.     DH = LPT port (00h-02h)
  27258. Return: AL = status
  27259.         00h successful
  27260. Desc:    this function closes the current capture file for the specified LPT
  27261.       and starts printing it if it is not a permanent capture file
  27262. Notes:    this function is supported by Advanced NetWare 2.1+
  27263.     if more data is sent to the LPT port after this call, a new capture
  27264.       file will be opeend
  27265. SeeAlso: AH=DFh/DL=03h,AH=DFh/DL=04h,AH=DFh/DL=05h,AH=DFh/DL=06h
  27266. ----------21E0-------------------------------
  27267. INT 21 - Digital Research DOS Plus - CALL BDOS
  27268.     AH = E0h
  27269.     CL = BDOS function number (see INT E0"CP/M")
  27270.     other registers as appropriate for function
  27271. Return: as appropriate for function
  27272. SeeAlso: AX=4459h,INT E0"CP/M"
  27273. ----------21E0-------------------------------
  27274. INT 21 - OS/286, OS/386 - INITIALIZE REAL PROCEDURE
  27275.     AH = E0h
  27276.     ???
  27277. Return: ???
  27278. SeeAlso: AH=E1h"OS/286"
  27279. ----------21E0-------------------------------
  27280. INT 21 - DoubleDOS - MENU CONTROL
  27281.     AH = E0h
  27282.     AL = subfunction
  27283.         01h exchange tasks
  27284.         73h resume invisible job if suspended
  27285.         74h kill other job
  27286.         75h suspend invisible job
  27287. Note:    identical to AH=F0h
  27288. SeeAlso: AH=F0h"DoubleDOS"
  27289. ----------21E0-------------------------------
  27290. INT 21 - VIRUS - "Jerusalem", "Armagedon" - INSTALLATION CHECK
  27291.     AH = E0h
  27292. Return: AX = 0300h if "Jerusalem" resident
  27293.     AX = DADAh if "Armagedon" resident
  27294. SeeAlso: AH=DEh"VIRUS",AX=DEDEh"VIRUS",AX=E00Fh
  27295. ----------21E0-------------------------------
  27296. INT 21 - Novell NetWare 4.0, Alloy NTNX - PRINT SPOOLING
  27297.     AH = E0h
  27298.     DS:SI -> request buffer
  27299.     ES:DI -> reply buffer
  27300.     subfunction in third byte of request buffer
  27301.         00h spool data to a capture file
  27302.         01h close and queue capture file
  27303.         02h set spool flags
  27304.         03h spool existing file
  27305.         04h get spool queue entry
  27306.         05h remove entry from spool queue
  27307. Return: AL = status
  27308. ----------21E0--SF06-------------------------
  27309. INT 21 - Novell NetWare - PRINT SERVICES - GET PRINTER STATUS
  27310.     AH = E0h subfn 06h
  27311.     DS:SI -> request buffer (see below)
  27312.     ES:DI -> reply buffer (see below)
  27313. Return: AL = status
  27314.         00h successful
  27315.         FFh no such printer
  27316. Desc:    get current state of specified printer attached to the server
  27317. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27318.       Alloy NTNX
  27319.  
  27320. Format of request buffer:
  27321. Offset    Size    Description
  27322.  00h    WORD    0002h (length of following data)
  27323.  02h    BYTE    06h (subfunction "Get Printer Status")
  27324.  03h    BYTE    printer number (00h-04h)
  27325.  
  27326. Format of reply buffer:
  27327. Offset    Size    Description
  27328.  00h    WORD    (call) 0004h (size of following results buffer)
  27329.  02h    BYTE    flag: 00h printer active, FFh printer halted
  27330.  03h    BYTE    flag: 00h printer online, 01h printer offline
  27331.  04h    BYTE    current form type
  27332.  05h    BYTE    target printer number (00h-04h)
  27333.         same as number in request buffer unless rerouted by server
  27334.         console
  27335. ----------21E0--SF09-------------------------
  27336. INT 21 - Novell NetWare - PRINT SERVICES - SPECIFY CAPTURE FILE
  27337.     AH = E0h subfn 09h
  27338.     DS:SI -> request buffer (see below)
  27339.     ES:DI -> reply buffer (see below)
  27340. Return: AL = status
  27341.         00h successful
  27342.         9Ch invalid path
  27343. Desc:    create a permanent capture file for the next print capture to be
  27344.       started
  27345. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27346.       Alloy NTNX
  27347.     the caller must have read, write, and create rights for the directory
  27348.       containing the capture file
  27349.  
  27350. Format of request buffer:
  27351. Offset    Size    Description
  27352.  00h    WORD    length of following data (max 102h)
  27353.  02h    BYTE    09h (subfunction "Specify Capture File")
  27354.  03h    BYTE    directory handle or 00h
  27355.  04h    BYTE    length of filename
  27356.  05h  N BYTEs    name of capture file
  27357.  
  27358. Format of reply buffer:
  27359. Offset    Size    Description
  27360.  00h    WORD    (call) 0000h (no results returned)
  27361. ----------21E00F-----------------------------
  27362. INT 21 - VIRUS - "8-tunes" - INSTALLATION CHECK
  27363.     AX = E00Fh
  27364. Return: AX = 4C31h if resident
  27365. SeeAlso: AH=E0h"VIRUS",AH=E1h"VIRUS"
  27366. ----------21E1-------------------------------
  27367. INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE CALL
  27368.     AH = E1h
  27369.     ???
  27370. Return: ???
  27371. Note:    protected mode only???
  27372. SeeAlso: AH=E0h"OS/286",AH=E2h"OS/286",AH=E3h"OS/286",AX=250Eh,INT 31/AX=0301h
  27373. ----------21E1-------------------------------
  27374. INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
  27375.     AH = E1h
  27376. SeeAlso: AH=E2h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
  27377. SeeAlso: AH=F1h"DoubleDOS"
  27378. ----------21E1-------------------------------
  27379. INT 21 - VIRUS - "Mendoza", "Fu Manchu" - INSTALLATION CHECK
  27380.     AH = E1h
  27381. Return: AX = 0300h if "Mendoza" resident
  27382.     AX = 0400h if "Fu Manchu" resident
  27383. SeeAlso: AX=E00Fh,AH=E4h"VIRUS"
  27384. ----------21E1--SF00-------------------------
  27385. INT 21 - Novell NetWare - MESSAGE SERVICES - SEND BROADCAST MESSAGE
  27386.     AH = E1h subfn 00h
  27387.     DS:SI -> request buffer (see below)
  27388.     ES:DI -> reply buffer (see below)
  27389. Return: AL = status
  27390.         00h successful
  27391.         FEh I/O error or out of dynamic workspace
  27392. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27393. SeeAlso: AH=DEh"NetWare",AH=DEh/DL=04h,AH=E1h/SF=01h,AH=E1h/SF=04h
  27394. SeeAlso: AH=E1h/SF=09h
  27395.  
  27396. Format of request buffer:
  27397. Offset    Size    Description
  27398.  00h    WORD    length of following data (max 9Eh)
  27399.  02h    BYTE    00h (subfunction "Send Broadcast Message")
  27400.  03h    BYTE    number of connections (01h-64h)
  27401.  04h  N BYTEs    list of connections to receive broadcast message
  27402.     BYTE    length of message (01h-37h)
  27403.       N BYTEs    broadcast message (no control characters or characters > 7Eh)
  27404.  
  27405. Format of reply buffer:
  27406. Offset    Size    Description
  27407.  00h    WORD    (call) size of following results buffer (max 65h)
  27408.  02h    BYTE    number of connections
  27409.  03h  N BYTEs    list of per-connection results
  27410.         00h successful
  27411.         FCh message rejected due to lack of buffer space
  27412.         FDh invalid connection number
  27413.         FFh blocked (see also AH=E1h/SF=02h)
  27414. ----------21E1--SF01-------------------------
  27415. INT 21 - Novell NetWare - MESSAGE SERVICES - GET BROADCAST MESSAGE
  27416.     AH = E1h subfn 01h
  27417.     DS:SI -> request buffer (see below)
  27418.     ES:DI -> reply buffer (see below)
  27419. Return: AL = status
  27420.         00h successful
  27421.         FCh full message queue
  27422.         FEh out of dynamic workspace
  27423. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27424. SeeAlso: AH=DEh/DL=04h,AH=E1h/SF=00h,AH=E1h/SF=05h,AH=E1h/SF=09h
  27425.  
  27426. Format of request buffer:
  27427. Offset    Size    Description
  27428.  00h    WORD    0001h (length of following data)
  27429.  02h    BYTE    01h (subfunction "Get Broadcast Message")
  27430.  
  27431. Format of reply buffer:
  27432. Offset    Size    Description
  27433.  00h    WORD    (call) size of following results buffer (max 38h)
  27434.  02h    BYTE    length of message (00h-37h)
  27435.         00h if no broadcast messages pending
  27436.  03h  N BYTEs    message (no control characters or characters > 7Eh)
  27437. ----------21E1-------------------------------
  27438. INT 21 - Novell NetWare - MESSAGE SERVICES - ENABLE/DISABLE BROADCAST MESSAGES
  27439.     AH = E1h
  27440.     DS:SI -> request buffer (see below)
  27441.     ES:DI -> reply buffer
  27442. Return: AL = error code
  27443. Note:    these functions are supported by NetWare 4.0+ but are not listed in
  27444.       _NetWare_System_Calls--DOS_; they may be obsolete
  27445. SeeAlso: AH=E1h/SF=00h,AH=E1h/SF=04h,AH=E1h/SF=09h
  27446.  
  27447. Format of request buffer:
  27448. Offset    Size    Description
  27449.  00h    WORD    length of following data (max 9Eh)
  27450.  02h    BYTE    subfunction
  27451.         02h disable station broadcasts
  27452.         03h enable station broadcasts
  27453.  03h    ???
  27454.  
  27455. Format of reply buffer:
  27456. Offset    Size    Description
  27457.  00h    WORD    (call) size of following results buffer
  27458.  02h    ???
  27459. ----------21E1--SF04-------------------------
  27460. INT 21 - Novell NetWare - MESSAGE SERVICES - SEND PERSONAL MESSAGE
  27461.     AH = E1h subfn 04h
  27462.     DS:SI -> request buffer (see below)
  27463.     ES:DI -> reply buffer (see below)
  27464. Return: AL = status
  27465.         00h successful
  27466.         FEh I/O error or out of dynamic workspace
  27467. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27468.     message pipes use CPU time on the file server; IPX, SPX, or NetBIOS
  27469.       connections should be used for peer-to-peer communications as these
  27470.       protocols do not use file server time
  27471. SeeAlso: AH=E1h/SF=00h,AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=08h
  27472.  
  27473. Format of request buffer:
  27474. Offset    Size    Description
  27475.  00h    WORD    length of following data (max E5h)
  27476.  02h    BYTE    04h (subfunction "Send Personal Message")
  27477.  03h    BYTE    number of connections (01h-64h)
  27478.  04h  N BYTEs    list of connections to receive broadcast message
  27479.     BYTE    length of message (01h-7Eh)
  27480.       N BYTEs    message (no control characters or characters > 7Eh)
  27481.  
  27482. Format of reply buffer:
  27483. Offset    Size    Description
  27484.  00h    WORD    (call) size of following results buffer (max 65h)
  27485.  02h    BYTE    number of connections
  27486.  03h  N BYTEs    list of per-connection results
  27487.         00h successful
  27488.         FCh message rejected because queue is full (contains 6 msgs)
  27489.         FDh incomplete pipe
  27490.         FFh failed
  27491. ----------21E1--SF05-------------------------
  27492. INT 21 - Novell NetWare - MESSAGE SERVICES - GET PERSONAL MESSAGE
  27493.     AH = E1h subfn 05h
  27494.     DS:SI -> request buffer (see below)
  27495.     ES:DI -> reply buffer (see below)
  27496. Return: AL = status
  27497.         00h successful
  27498.         FEh out of dynamic workspace
  27499. Desc:    return the oldest message in the default file server's message queue
  27500.       for the calling workstation
  27501. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27502. SeeAlso: AH=E1h/SF=01h,AH=E1h/SF=04h,AH=E1h/SF=06h,AH=E1h/SF=08h
  27503.  
  27504. Format of request buffer:
  27505. Offset    Size    Description
  27506.  00h    WORD    0001h (length of following data)
  27507.  02h    BYTE    05h (subfunction "Get Personal Message")
  27508.  
  27509. Format of reply buffer:
  27510. Offset    Size    Description
  27511.  00h    WORD    (call) size of following results buffer (max 80h)
  27512.  02h    BYTE    connection number of sending station
  27513.  03h    BYTE    length of message (00h-7Eh)
  27514.         00h if no personal messages pending
  27515.  04h  N BYTEs    message (no control characters or characters > 7Eh)
  27516. ----------21E1--SF06-------------------------
  27517. INT 21 - Novell NetWare - MESSAGE SERVICES - OPEN MESSAGE PIPE
  27518.     AH = E1h subfn 06h
  27519.     DS:SI -> request buffer (see below)
  27520.     ES:DI -> reply buffer (see below)
  27521. Return: AL = status
  27522.         00h successful
  27523.         FEh out of dynamic workspace
  27524. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27525. SeeAlso: AH=E1h/SF=04h,AH=E1h/SF=07h,AH=E1h/SF=08h
  27526.  
  27527. Format of request buffer:
  27528. Offset    Size    Description
  27529.  00h    WORD    length of following data (max 66h)
  27530.  02h    BYTE    06h (subfunction "Open Message Pipe")
  27531.  03h    BYTE    number of pipes to open (01h-64h)
  27532.  04h  N BYTEs    list of connection numbers
  27533.  
  27534. Format of reply buffer:
  27535. Offset    Size    Description
  27536.  00h    WORD    (call) size of following results buffer (max 65h)
  27537.  02h    BYTE    number of connections
  27538.  03h  N BYTEs    list of results
  27539.         00h successful
  27540.         FEh incomplete (target half not yet created)
  27541.         FFh failed
  27542. ----------21E1--SF07-------------------------
  27543. INT 21 - Novell NetWare - MESSAGE SERVICES - CLOSE MESSAGE PIPE
  27544.     AH = E1h subfn 07h
  27545.     DS:SI -> request buffer (see below)
  27546.     ES:DI -> reply buffer (see below)
  27547. Return: AL = status
  27548.         00h successful
  27549.         FCh full message queue
  27550.         FEh out of dynamic workspace
  27551. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27552. SeeAlso: AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=08h
  27553.  
  27554. Format of request buffer:
  27555. Offset    Size    Description
  27556.  00h    WORD    length of following data (max 66h)
  27557.  02h    BYTE    07h (subfunction "Close Message Pipe")
  27558.  03h    BYTE    number of pipes to close (01h-64h)
  27559.  04h  N BYTEs    list of connection numbers
  27560.  
  27561. Format of reply buffer:
  27562. Offset    Size    Description
  27563.  00h    WORD    (call) size of following results buffer (max 65h)
  27564.  02h    BYTE    number of connections
  27565.  03h  N BYTEs    list of results
  27566.         00h successful
  27567.         FDh failed
  27568.         FFh no such pipe
  27569. ----------21E1--SF08-------------------------
  27570. INT 21 - Novell NetWare - MESSAGE SERVICES - CHECK PIPE STATUS
  27571.     AH = E1h subfn 08h
  27572.     DS:SI -> request buffer (see below)
  27573.     ES:DI -> reply buffer (see below)
  27574. Return: AL = status
  27575.         00h successful
  27576.         FCh full message queue
  27577.         FEh out of dynamic workspace
  27578. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27579. SeeAlso: AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=07h
  27580.  
  27581. Format of request buffer:
  27582. Offset    Size    Description
  27583.  00h    WORD    length of following data (max 66h)
  27584.  02h    BYTE    08h (subfunction "Check Pipe Status")
  27585.  03h    BYTE    number of pipes to monitor (01h-64h)
  27586.  04h  N BYTEs    list of connection numbers
  27587.  
  27588. Format of reply buffer:
  27589. Offset    Size    Description
  27590.  00h    WORD    (call) size of following results buffer (max 65h)
  27591.  02h    BYTE    number of connections
  27592.  03h  N BYTEs    list of pipe statuses
  27593.         00h open
  27594.         FEh incomplete
  27595.         FFh closed
  27596. ----------21E1--SF09-------------------------
  27597. INT 21 - Novell NetWare - MESSAGE SERVICES - BROADCAST TO CONSOLE
  27598.     AH = E1h subfn 09h
  27599.     DS:SI -> request buffer (see below)
  27600.     ES:DI -> reply buffer (see below)
  27601. Return: AL = status
  27602.         00h successful
  27603.         FCh full message queue
  27604.         FEh out of dynamic workspace
  27605. Desc:    send a one-line message to the system console on the default file
  27606.       server
  27607. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  27608. SeeAlso: AH=DEh/DL=04h,AH=E1h/SF=00h,AH=E1h/SF=01h,AH=E3h/SF=D1h
  27609.  
  27610. Format of request buffer:
  27611. Offset    Size    Description
  27612.  00h    WORD    length of following data (max 3Eh)
  27613.  02h    BYTE    09h (subfunction "Broadcast to Console")
  27614.  03h    BYTE    length of message (01h-3Ch)
  27615.  04h  N BYTEs    message (no control characters or characters > 7Eh)
  27616.  
  27617. Format of reply buffer:
  27618. Offset    Size    Description
  27619.  00h    WORD    (call) 0000h (no results returned)
  27620. ----------21E2-------------------------------
  27621. INT 21 - OS/286, OS/386 - SET REAL PROCEDURE SIGNAL HANDLER
  27622.     AH = E2h
  27623.     ???
  27624. Return: ???
  27625. SeeAlso: AH=E0h"OS/286",AH=E1h"OS/286",AH=E6h"OS/286"
  27626. ----------21E2-------------------------------
  27627. INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
  27628.     AH = E2h
  27629.     AL = character
  27630. Return: AL = 00h successful
  27631.          01h buffer full (128 characters)
  27632. SeeAlso: AH=E1h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
  27633. SeeAlso: AH=F2h"DoubleDOS"
  27634. ----------21E2--SF00-------------------------
  27635. INT 21 - Novell NetWare - DIRECTORY SERVICES - SET DIRECTORY HANDLE
  27636.     AH = E2h subfn 00h
  27637.     DS:SI -> request buffer (see below)
  27638.     ES:DI -> reply buffer (see below)
  27639. Return: AL = status (00h,98h,9Bh,9Ch) (see below)
  27640. Desc:    set the target handle to reference the directory specified by the
  27641.       source handle and the source path; both handles must refer to the
  27642.       same file server
  27643. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27644.       Alloy NTNX
  27645.     the target handle is not changed if this function fails
  27646. SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=12h,AH=E2h/SF=13h
  27647.  
  27648. Values for status:
  27649.  00h    successful
  27650.  84h    not permitted to create
  27651.  8Ah    not permitted to delete
  27652.  8Bh    not permitted to rename
  27653.  8Ch    not permitted to modify
  27654.  98h    nonexistent volume
  27655.  9Bh    invalid directory handle
  27656.  9Ch    invalid path
  27657.  9Eh    invalid filename
  27658.  9Fh    directory currently in use
  27659.  A0h    directory not empty
  27660.  FCh    no such bindery object
  27661.  
  27662. Format of request buffer:
  27663. Offset    Size    Description
  27664.  00h    WORD    length of following data (max 103h)
  27665.  02h    BYTE    00h (subfunction "Set Directory Handle")
  27666.  03h    BYTE    directory handle of target
  27667.  04h    BYTE    directory handle of source
  27668.  05h    BYTE    length of source directory path (01h-FFh)
  27669.  06h  N BYTEs    source directory path
  27670.  
  27671. Format of reply buffer:
  27672. Offset    Size    Description
  27673.  00h    WORD    (call) 0000h (no results returned)
  27674. ----------21E2--SF01-------------------------
  27675. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET DIRECTORY PATH
  27676.     AH = E2h subfn 01h
  27677.     DS:SI -> request buffer (see below)
  27678.     ES:DI -> reply buffer (see below)
  27679. Return: AL = status (00h,9Bh) (see AH=E2h/SF=00h)
  27680. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27681.       Alloy NTNX
  27682. SeeAlso: AH=E2h/SF=02h,AH=E2h/SF=03h,AH=E2h/SF=1Ah,AH=E9h
  27683.  
  27684. Format of request buffer:
  27685. Offset    Size    Description
  27686.  00h    WORD    0002h (length of following data)
  27687.  02h    BYTE    01h (subfunction "Get Directory Path")
  27688.  03h    BYTE    directory handle
  27689.  
  27690. Format of reply buffer:
  27691. Offset    Size    Description
  27692.  00h    WORD    (call) length of following data buffer
  27693.  02h    BYTE    length of directory path (01h-FFh)
  27694.  03h  N BYTEs    full directory path including volume
  27695. ----------21E2--SF02-------------------------
  27696. INT 21 - Novell NetWare - DIRECTORY SERVICES - SCAN DIRECTORY INFORMATION
  27697.     AH = E2h subfn 02h
  27698.     DS:SI -> request buffer (see below)
  27699.     ES:DI -> reply buffer (see below)
  27700. Return: AL = status (00h,98h,9Bh,9Ch) (see AH=E2h/SF=00h)
  27701. Desc:    get information about the first or next subdirectory of the specified
  27702.       directory
  27703. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27704.       Alloy NTNX
  27705. SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=03h,AH=E2h/SF=19h
  27706.  
  27707. Format of request buffer:
  27708. Offset    Size    Description
  27709.  00h    WORD    length of following data (max 104h)
  27710.  02h    BYTE    02h (subfunction "Scan Directory Information")
  27711.  03h    BYTE    directory handle
  27712.  04h    WORD    subdirectory number (big-endian)
  27713.         0000h for first call, returned subdir number + 1 on next call
  27714.  06h    BYTE    length of directory path
  27715.  07h  N BYTEs    directory path
  27716.  
  27717. Format of reply buffer:
  27718. Offset    Size    Description
  27719.  00h    WORD    (call) 001Ch (length of following data buffer)
  27720.  02h 16 BYTEs    subdirectory name
  27721.  12h    DWORD    date and time of creation (big-endian) (see below)
  27722.  16h    DWORD    object ID of owner (bid-endian)
  27723.  1Ah    BYTE    maximum directory rights (see AH=E2h/SF=03h)
  27724.  1Bh    BYTE    unused
  27725.  1Ch    WORD    subdirectory number (big-endian)
  27726.  
  27727. Bitmask of date and time:
  27728.  bits 31-25: year-1980
  27729.  bits 24-21: month
  27730.  bits 20-16: day
  27731.  bits 15-11: hour
  27732.  bits 10-5: minute
  27733.  bits 4-0: second
  27734. ----------21E2--SF03-------------------------
  27735. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET EFFECTIVE DIRECTORY RIGHTS
  27736.     AH = E2h subfn 03h
  27737.     DS:SI -> request buffer (see below)
  27738.     ES:DI -> reply buffer (see below)
  27739. Return: AL = status (00h,98h,9Bh) (see AH=E2h/SF=00h)
  27740. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27741.       Alloy NTNX
  27742. SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=02h
  27743.  
  27744. Format of request buffer:
  27745. Offset    Size    Description
  27746.  00h    WORD    length of following data (max 102h)
  27747.  02h    BYTE    03h (subfunction "Get Effective Directory Rights")
  27748.  03h    BYTE    directory handle
  27749.  04h    BYTE    length of directory path (00h-FFh)
  27750.  05h  N BYTEs    directory path
  27751.  
  27752. Format of reply buffer:
  27753. Offset    Size    Description
  27754.  00h    WORD    (call) 0001h (length of following data buffer)
  27755.  02h    BYTE    effective directory rights (see below)
  27756.  
  27757. Bitmask of directory rights:
  27758.  bit 0: reading allowed
  27759.  bit 1: writing allowed
  27760.  bit 2: opens allowed
  27761.  bit 3: file creation allowed
  27762.  bit 4: deletion allowed
  27763.  bit 5: "parental" may create/delete subdirectories and
  27764.     grant/revoke trustee rights
  27765.  bit 6: directory search allowed
  27766.  bit 7: file attributes may be changed
  27767. ----------21E2--SF04-------------------------
  27768. INT 21 - Novell NetWare - DIRECTORY SERVICES - MODIFY MAXIMUM RIGHTS MASK
  27769.     AH = E2h subfn 04h
  27770.     DS:SI -> request buffer (see below)
  27771.     ES:DI -> reply buffer (see below)
  27772. Return: AL = status (00h,8Ch,98h,9Ch) (see AH=E2h/SF=00h)
  27773. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  27774.       Alloy NTNX
  27775. SeeAlso: AH=E2h/SF=03h,AH=E2h/SF=0Ah,AH=E2h/SF=0Dh
  27776.  
  27777. Format of request buffer:
  27778. Offset    Size    Description
  27779.  00h    WORD    length of following data (max 104h)
  27780.  02h    BYTE    04h (subfunction "Modify Maximum Rights Mask")
  27781.  03h    BYTE    directory handle
  27782.  04h    BYTE    rights to grant (see AH=E2h/SF=03h)
  27783.  05h    BYTE    rights to revoke (see AH=E2h/SF=03h)
  27784.  06h    BYTE    length of directory path (00h-FFh)
  27785.  07h  N BYTEs    directory path
  27786. Note:    the rights specified at offset 05h are revoked first, and then the
  27787.       rights specified at offset 04h are added to the resulting rights
  27788.       mask
  27789.  
  27790. Format of re